在线时间 7 小时 最后登录 2013-8-7 注册时间 2013-7-12 听众数 7 收听数 1 能力 0 分 体力 54 点 威望 0 点 阅读权限 20 积分 29 相册 0 日志 0 记录 0 帖子 30 主题 3 精华 0 分享 0 好友 4
升级 25.26%
TA的每日心情 无聊 2013-8-7 09:47
签到天数: 6 天
[LV.2]偶尔看看I
自我介绍 lingo 探索者
在lingo内直接运行,无法寻到局部最优解,勾选全局优化选项后,可以找到全局最优解,但是通过c调用lingo文件,始终返回的是无解,即使在c内set gloval 1也无用。一旦将lingo文件改成lp模型,c调用可以求解,遇到NLP模型c调用返回的是无解,到底是哪里出了问题,版本问题还是???请会c调用lingo的朋友帮忙看看,现将文件贴上
shili_liuyu_no-reservoir.lg4
model:
sets:
!1..m~;
smonth/1..12/:qr;
!1..n~;
squyu/1..2/:qz;
scoefficient(squyu,smonth):qsmin,qfmin,qsc,qsh,qst,qscx,qstx,qf,qj,qscmin,qstmin,qscb,qstb;
huiguixishu:xssc,xssh,xsst,alw;
endsets
[OBJECTIVE] max = @SUM(scoefficient(i,j):qf(i,j));
!约束条件;
alw(1)=@SUM(scoefficient(i,j):qscx(i,j)-qsc(i,j)+qstx(i,j)-qst(i,j));!统计缺水量;
@for(scoefficient(i,j)|i#eq#1:qsc(i,j)+qsh(i,j)+qst(i,j)<=qr(j)+qj(i,j)-qsmin(i,j));
@for(scoefficient(i,j)|i#eq#2:qsc(i,j)+qsh(i,j)+qst(i,j)<=qf(i-1,j)+qj(i,j)-qsmin(i,j));
@for(scoefficient(i,j): @bnd(qscmin(i,j),qsc(i,j),qscx(i,j)));
@for(scoefficient(i,j): @bnd(qstmin(i,j),qst(i,j),qstx(i,j)));
@for(squyu(i): @sum(smonth(j):qst(i,j)+qsc(i,j)+qsh(i,j))<=qz(i));
@for(scoefficient(i,j)|i#eq#1:qr(j)+qj(i,j)-xssc(1)*qsc(i,j)-xssh(1)*qsh(i,j)-xsst(1)*qst(i,j)-qf(i,j)=0);
@for(scoefficient(i,j)|i#eq#2:qf(i-1,j)+qj(i,j)-xssc(1)*qsc(i,j)-xssh(1)*qsh(i,j)-xsst(1)*qst(i,j)-qf(i,j)=0);
@for(scoefficient(i,j):qf(i,j)>=qfmin(i,j));
@for(scoefficient(i,j):qscb=@if(qsc(i,j)#eq#qscx(i,j),1,0));
@for(scoefficient(i,j):qstb=@if(qst(i,j)#eq#qstx(i,j),1,0));
@SUM(scoefficient(i,j):qscb(i,j))/24>=0.9;
@SUM(scoefficient(i,j):qstb(i,j))/24>=1;
data:
qz=32.4439,52.9415;
qsmin=@file('liuyu.txt');
qfmin=@file('liuyu.txt');
qscx=@file('liuyu.txt');
qsh=@file('liuyu.txt');
qstx=@file('liuyu.txt');
qr=@file('liuyu.txt');
qj=@file('liuyu.txt');
qscmin=@file('liuyu.txt');
qstmin=@file('liuyu.txt');
xssc=0.6;
xssh=0.64;
xsst=0.64;
@text('result\qsc.txt')=scoefficient,qsc;
@text('result\qsh.txt')=scoefficient,qsh;
@text('result\qst.txt')=scoefficient,qst;
@text('result\qf.txt')=scoefficient,qf;
@pointer(1)=OBJECTIVE;
@pointer(2)=qf;
@pointer(3)=@status();
enddata
end
liuyu.txt
5.52 5.17 5.52 5.35 5.52 5.35 5.52 5.52 5.35 5.52 5.35 5.52
7.37 6.89 7.37 7.13 7.37 7.13 7.37 7.37 7.13 7.37 7.13 7.37 ~
8.76 8.19 8.76 8.48 8.76 8.48 8.76 8.76 8.48 8.76 8.48 8.76
9.16 8.57 9.16 8.86 9.16 8.86 9.16 9.16 8.86 9.16 8.86 9.16 ~
0.88 0.88 0.88 2.12 2.12 2.12 5.63 5.63 5.65 2.12 0.88 0.88
2.06 2.06 2.06 3.73 3.73 3.73 8.48 8.48 8.51 3.73 2.06 2.06 ~
0.11 0.11 0.11 0.11 0.11 0.14 0.35 0.35 0.35 0.14 0.11 0.11
0.22 0.22 0.22 0.22 0.22 0.25 0.66 0.66 0.66 0.25 0.22 0.22~
0.03 0.03 0.03 0.03 0.03 0.03 0.08 0.08 0.08 0.03 0.03 0.03
0.05 0.05 0.05 0.05 0.05 0.05 0.14 0.14 0.14 0.05 0.05 0.05 ~
6.81 4.73 17.03 67.89 35.34 31.50 22.70 56.73 20.24 11.47 9.00 8.88 ~
6.20 4.94 14.66 34.39 26.02 29.85 18.43 38.00 17.05 9.18 6.29 5.25
8.02 6.38 11.25 22.38 10.55 38.21 16.74 17.12 17.71 7.66 4.14 3.52 ~
0.73 0.73 0.73 1.60 1.60 1.60 4.05 4.05 4.07 1.60 0.73 0.73
1.76 1.76 1.76 2.94 2.94 2.94 6.26 6.26 6.28 2.94 1.76 1.76~
0.02 0.02 0.02 0.02 0.02 0.03 0.08 0.08 0.08 0.03 0.02 0.02
0.04 0.04 0.04 0.04 0.04 0.05 0.12 0.12 0.12 0.05 0.04 0.04~
shili_liuyu.c
#include <stdlib.h>
#include <string.h>
#include "lingd11.h"
void main()
{
int i,j, nPointersNow, nError;
double dStatus=-1.0,lgsolution,lgvolume[2][12];
pLSenvLINGO pLINGO;
char pcScript[256];
pLINGO = LScreateEnvLng();
if (!pLINGO)
{
printf("Can't create LINGO environment!\n");
goto FinalExit;
}
// Open LINGO's log file
nError = LSopenLogFileLng( pLINGO, "LINGO.log");
if ( nError) goto ErrorExit;
// Pass memory transfer pointers to LINGO
// @POINTER(1) - Items set
nError = LSsetPointerLng( pLINGO,(void*)&lgsolution,
&nPointersNow);
if ( nError) goto ErrorExit;
// @POINTER(2) - Item weights
nError = LSsetPointerLng( pLINGO, lgvolume,
&nPointersNow);
if ( nError) goto ErrorExit;
// @POINTER(3) - Item ranks
nError = LSsetPointerLng( pLINGO, (void*)&dStatus,
&nPointersNow);
if ( nError) goto ErrorExit;
// Here is the script we want LINGO to run:
// Load the model, solve the model, exit.
strcpy( pcScript, "set GLOBAL 1\n TAKE shili_liuyu_reservoir.lng\n GO \n QUIT \n");
// Run the script
nError = LSexecuteScriptLng( pLINGO, pcScript);
if ( nError) goto ErrorExit;
// display solution status
printf("\nSolution status (should be 0): %d\n", (int) dStatus);
// display items in optimal sack
printf("\n lgsolution: %f \n",lgsolution);
printf("\n lgvolume: \n");
for(i=0;i<2;i++)
{
for(j=0;j<12;j++)
printf(" %f\t ",lgvolume[j]);
printf("\n");
}
// Close the log file
LScloseLogFileLng( pLINGO);
// All done
goto NormalExit;
ErrorExit:
printf("LINGO Error Code: %d\n", nError);
NormalExit:
LSdeleteEnvLng( pLINGO);
FinalExit: ;
}
zan