svanscan 发表于 2013-11-6 17:12

求解答,我用lingo计算最小交叉熵的解,老是提示错误,怎么解决?

本帖最后由 svanscan 于 2013-11-6 17:12 编辑

model:!16家银行;
sets:
A/1..16/:ai;
B/1..16/:bj;
links(A,B):X,X0;
!X1=X_*;
endsets
data:
ai=0.049105298,0.19706518,0.079929381,0.040404067,0.00307861,0.029535259,0.030970463,0.081245849,
0.053001907,0.122173474,0.000229636,0.067807575,0.359324615,0.051351782,0.004097295,0.008038271;
bj=0.06029401,0.017726814,0.034382538,0.041643595,0.006514545,0.075761924,0.011835925,0.017374484,
0.11483671,0.17727039,0.029125245,0.127436517,0.242528843,0.025613802,0.002559618,0.015095039;
enddata
!目标函数:
min=@sum(links(i,j)/i#ne#j:X(i,j)*(@log(X(i,j))-@log(X0(i,j))));
aa=@sum(A(i):ai(i));
bb=@sum(b(j):bj(j));
!约束条件;
@for(A(i):@sum(B(j):X(i,j))=X(i,i)+ai(i););
@for(B(j):@sum(A(i):X(i,j))=X(j,j)+bj(j););
@for(links(i,j):X0(i,j)=@if(i#EQ#j,0,ai(i)*bj(j)));
end


file:///C:\Users\lenovo\AppData\Roaming\Tencent\Users\605193618\QQ\WinTemp\RichOle\U)R3W8`~KYA$65%A~QPA6G7.jpgfile:///C:\Users\lenovo\AppData\Roaming\Tencent\Users\605193618\QQ\WinTemp\RichOle\L0OIYBfile:///C:\Users\lenovo\AppData\Roaming\Tencent\Users\605193618\QQ\WinTemp\RichOle\L0OIYBfile:///C:\Users\lenovo\AppData\Roaming\Tencent\Users\605193618\QQ\WinTemp\RichOle\U)R3W8`~KYA$65%A~QPA6G7.jpg
提示错误如下
error code  1017
error text
unexpected jacobian overflow. Contact Lingo Systems for patch availability(1).

wujianjack2 发表于 2013-11-6 18:06

程序中有些错误,改正后可以在LINGO 11上运行,如需软件,可以在这个帖子中下载:
http://www.madio.net/thread-190400-1-1.html
你的这个错误信息经常会出现在LINGO 9的版本中,建议尝试LINGO 10或者LINGO 11。
如果使用默认设置,则提示无可行解,但勾选Global Solver后求解时间过长,我简单试了下没有结果,你不妨检查下模型。
修改后的程序代码下:
model:!16家银行;sets:
A/1..16/:ai;
B/1..16/:bj;
links(A,B):X,X0;
!X1=X_*;
endsets
data:
ai=0.049105298,0.19706518,0.079929381,0.040404067,0.00307861,0.029535259,0.030970463,0.081245849,
0.053001907,0.122173474,0.000229636,0.067807575,0.359324615,0.051351782,0.004097295,0.008038271;
bj=0.06029401,0.017726814,0.034382538,0.041643595,0.006514545,0.075761924,0.011835925,0.017374484,
0.11483671,0.17727039,0.029125245,0.127436517,0.242528843,0.025613802,0.002559618,0.015095039;
enddata
!目标函数;
min=@sum(links(i,j)|i#ne#j:X(i,j)*(@log(X(i,j))-@log(X0(i,j))));
aa=@sum(A(i):ai(i));
bb=@sum(b(j):bj(j));
!约束条件;
@for(A(i):@sum(B(j):X(i,j))=X(i,i)+ai(i););
@for(B(j):@sum(A(i):X(i,j))=X(j,j)+bj(j););
@for(links(i,j):X0(i,j)=@if(i#EQ#j,0,ai(i)*bj(j)));
end

svanscan 发表于 2013-11-6 19:49

wujianjack2 发表于 2013-11-6 18:06 static/image/common/back.gif
程序中有些错误,改正后可以在LINGO 11上运行,如需软件,可以在这个帖子中下载:
http://www.madio.net/t ...

谢谢啊,但我电脑是32位的,装lingo11,会不会运行不畅

svanscan 发表于 2013-11-6 20:14

wujianjack2 发表于 2013-11-6 18:06 static/image/common/back.gif
程序中有些错误,改正后可以在LINGO 11上运行,如需软件,可以在这个帖子中下载:
http://www.madio.net/t ...

可是,我用的是别人的数据,他运行出来的最有解不是这样子的,高手这又是为什么

wujianjack2 发表于 2013-11-6 20:38

svanscan 发表于 2013-11-6 19:49 static/image/common/back.gif
谢谢啊,但我电脑是32位的,装lingo11,会不会运行不畅

   没这回事吧??你试下吧。

wujianjack2 发表于 2013-11-6 20:39

svanscan 发表于 2013-11-6 20:14 static/image/common/back.gif
可是,我用的是别人的数据,他运行出来的最有解不是这样子的,高手这又是为什么

    你的模型和别人的是一样的么?检查下吧。

svanscan 发表于 2013-11-6 21:26

wujianjack2 发表于 2013-11-6 20:39 static/image/common/back.gif
你的模型和别人的是一样的么?检查下吧。

哦,是有点不一样,我不知道怎么把我的模型写到这上面,就传到附件里了,还请麻烦你帮我看下,应该怎么改?谢谢。

svanscan 发表于 2013-11-8 00:13

wujianjack2 发表于 2013-11-6 20:39 static/image/common/back.gif
你的模型和别人的是一样的么?检查下吧。

我忘记了一个约束条件,如果我的再加上,所有的元素和为1这样的约束条件,又该怎么改呢,

wujianjack2 发表于 2013-11-8 12:52

   匆匆写了几句,仍无解,可能有哪个地方写错了,你自己看看吧。
MODEL:
SETS:
ASET:AI;  !SIXTEEN BANKS;
BSET:BJ;  !SIXTEEN BANKS;
LINKS(ASET,BSET):XZERO,XSTAR,RATIO_LOG_STAR_ZERO;
ENDSETS
DATA:
AI=0.049105298,0.19706518,0.079929381,0.040404067,0.00307861,0.029535259,0.030970463,0.081245849,
   0.053001907,0.122173474,0.000229636,0.067807575,0.359324615,0.051351782,0.004097295,0.008038271;
BJ=0.06029401,0.017726814,0.034382538,0.041643595,0.006514545,0.075761924,0.011835925,0.017374484,
   0.11483671,0.17727039,0.029125245,0.127436517,0.242528843,0.025613802,0.002559618,0.015095039;
ENDDATA
MIN=@SUM(LINKS(I,J):XSTAR(I,J)*RATIO_LOG_STAR_ZERO(I,J));
@FOR(LINKS(I,J):RATIO_LOG_STAR_ZERO(I,J)=@IF(XSTAR(I,J) #NE# 0 #AND# XZERO(I,J) #NE# 0,@LOG(XSTAR(I,J))-@LOG(XZERO(I,J)),0));
@FOR(BSET(J):@SUM(ASET(I):XSTAR(I,J))=BJ(J));
@FOR(ASET(I):@SUM(BSET(J):XSTAR(I,J))=AI(I));
@FOR(LINKS(I,J)|I #NE# J:XZERO(I,J)=AI(I)*BJ(J));
@FOR(LINKS(I,J)|I #EQ# J:XZERO(I,J)=0);
@SUM(LINKS(I,J):XZERO(I,J)+XSTAR(I,J))=1;
END

svanscan 发表于 2013-11-8 13:12

wujianjack2 发表于 2013-11-8 12:52 static/image/common/back.gif
匆匆写了几句,仍无解,可能有哪个地方写错了,你自己看看吧。
MODEL:
SETS:


万分感谢呐!!!
页: [1] 2
查看完整版本: 求解答,我用lingo计算最小交叉熵的解,老是提示错误,怎么解决?