|
请教一下:为什么用张老师书上P56页直接交叉熵的例子,得到的结果还是原来的平衡前的sam表,且Hratio.l=0,例子里面已经设定了Hratio.lo=0.5了呀?请教各位哪里出了问题???附照着张老师书上打出来的程序
set ac /sec1,sec2,lab,hh,total/;
set i(ac) /sec1,sec2,lab,hh/;
alias(ac,acp);
alias(i,j);
table sam(*,*)
sec1 sec2 lab hh total
sec1 52 45 150 247
sec2 95 48 90 233
lab 120 89 209
hh 192 192
total 267 182 192 240
;
parameters
Q0(i,j)
H0
;
Q0(i,j)=sam(i,j);
H0=sum((i,j),sam(i,j));
display H0,sam;
variables
Q(i,j)
H
Hratio 调整和原始两个总数的比例
z 预期熵值
Positive variable Q(i,j);
equations
totalsumm 被调整的总数
directentropy 预期交叉熵
balance 各个账户的平衡限制条件
Hratiodef Hratio的定义和范围;
totalsumm.. H=e=sum((i,j),Q(i,j));
Hratiodef.. Hratio =e= H/H0;
directentropy.. z =e= sum((i,j)$sam(i,j),(1/H)*Q(i,j)*log(Q
(i,j)/sam(i,j))-log(Hratio));
balance(i).. sum(j,Q(i,j))=e=sum(j,Q(j,i));
Q.l(i,j)=Q0(i,j);
H.l=H0;
Hratio.lo=0.5;
Hratio.up=2;
model sambal /all/;
solve sambal using nlp minimizing z;
display q.l,h.l,hratio.l;
*end
|