数学建模社区-数学中国

标题: c调用lingo问题,求大侠帮忙 [打印本页]

作者: ckyych    时间: 2013-7-24 09:00
标题: c调用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: ;

}
作者: ckyych    时间: 2013-7-24 09:33
自己顶下
作者: guzili    时间: 2013-7-24 13:29
这么长,看都看不下去
作者: ckyych    时间: 2013-7-24 15:01
guzili 发表于 2013-7-24 13:29
这么长,看都看不下去

慢慢看啊
作者: wujianjack2    时间: 2013-7-24 16:54
好问题!记下了。可是C神马的忘得差不多了,先补补相关内容再看看!欢迎大神们解答!
作者: ckyych    时间: 2013-8-6 19:15
wujianjack2 发表于 2013-7-24 16:54
好问题!记下了。可是C神马的忘得差不多了,先补补相关内容再看看!欢迎大神们解答!

没有大师回答啊




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5