数学建模社区-数学中国

标题: Lingo输出的问题 [打印本页]

作者: gf2015    时间: 2015-7-27 23:30
标题: Lingo输出的问题
本帖最后由 gf2015 于 2015-7-27 23:30 编辑
  1. data:  !手动输入各种车的数量;
  2.     Car1=?;
  3.     Car2=?;
  4.     Car3=?;
  5. enddata

  6. sets: !五个表的定义;
  7. A/1..15/:AI,AII,AIII,AR,aa;
  8. B/1..5/:BI,BII,BR,bb;
  9. C/1..21/:CI,CII,CIII,CR,cc;
  10. D/1..6/:DI,DII,DR,dd;
  11. E/1..6/:EI,EII,ER,ee;
  12. Tenp/1..15/:de;
  13. endsets

  14. data: !将各列数据赋进来;
  15. AI,AII,AIII,AR,BI,BII,BR,CI,CII,CIII,CR,DI,DII,DR,EI,EII,ER=@ole('D:\A题模式.xlsx');
  16. de=0;
  17. enddata

  18. min=Z;

  19. !对车辆的约束;
  20. @sum(A:aa)=@sum(B:bb);
  21. @sum(C:cc)=@sum(D:dd);
  22. @sum(C:cc)=@sum(E:ee);

  23. @for(Tenp(I)|I#le#6:de=@abs(dd(I)-ee(I)));
  24. @sum(Tenp:de)=0;

  25. @for(A(I):@bnd(0,aa(I),50));
  26. @for(B(I):@bnd(0,bb(I),50));
  27. @for(C(I):@bnd(0,cc(I),50));
  28. @for(D(I):@bnd(0,dd(I),50));
  29. @for(E(I):@bnd(0,ee(I),50));

  30. @for(A(I):@gin(aa(I)));
  31. @for(B(I):@gin(bb(I)));
  32. @for(C(I):@gin(cc(I)));
  33. @for(D(I):@gin(dd(I)));
  34. @for(E(I):@gin(ee(I)));
  35. !对运量的约束;
  36. @sum(A(I):AI(I)*aa(I))+@sum(B(I):BI(I)*bb(I))+@sum(C(I):CI(I)*cc(I))+@sum(D(I):DI(I)*dd(I))+@sum(E(I):EI(I)*ee(I))>=Car1;
  37. @sum(A(I):AII(I)*aa(I))+@sum(B(I):BII(I)*bb(I))+@sum(C(I):CII(I)*cc(I))+@sum(D(I):DII(I)*dd(I))+@sum(E(I):EII(I)*ee(I))>=Car2;
  38. @sum(A(I):AIII(I)*aa(I))+@sum(C(I):CIII(I)*cc(I))>=Car3;

  39. @sum(C:cc)<=@sum(A:aa)/5;

  40. !目标值;

  41. Z=@sum(C:cc)+@sum(A:aa);
  42. end
复制代码
以上是一个线性优化的代码。
因为我定义的集比较多,集里面的属性多。结果输出是吧所有的属性值全部作为Variable,导致输出结果冗长。
如下图: 2015-07-27_22-29-03.png


我想请问的是:怎样才能使Lingo输出特定的变量而不是把变量全部输出?






作者: liwenhui    时间: 2015-7-28 09:34
有三个函数也许可以帮你定制你自己的输出,一个叫@solu,一个叫@divert,以及@write

作者: gf2015    时间: 2015-7-28 10:50
本帖最后由 gf2015 于 2015-7-28 10:59 编辑
The SOLU, or SOLUTION, command displays a solution report for the current model. The syntax of the SOLU command is:

SOLU ['header_text'] [ var_or_row_names]

For a standard solution report, omit the two optional arguments and enter the SOLU command by itself. LINGO will print primal and dual values for all the variables and rows in the model. LINGO will label all the columns in the report.

The first optional field, header_text, will be displayed as a title header in the solution report. If the header_text argument is included, LINGO prints primal values only, omitting all labels in the report.

The second optional field, var_or_row_names, is a variable and/or row name list that, if included, will limit the report to the given variable or row name. The standard wild card characters (* and %) are supported in the variable and row names.

As an example, in the following session, we load the Chess Snackfoods example from the Using Sets section and then generate several solution reports using SOLU:
  1. : TAKE CHESS.LNG
  2. : TERSE
  3. : GO

  4. Global optimal solution found at step:         0
  5. Objective value:                       2692.308

  6. : !Generate a standard SOLU report
  7. : SOLU

  8.                  Variable      Value  Reduced Cost
  9.          SUPPLY( PEANUTS)   750.0000     0.0000000
  10.          SUPPLY( CASHEWS)   250.0000     0.0000000
  11.              PRICE( PAWN)   2.000000     0.0000000
  12.            PRICE( KNIGHT)   3.000000     0.0000000
  13.            PRICE( BISHOP)   4.000000     0.0000000
  14.              PRICE( KING)   5.000000     0.0000000
  15.            PRODUCE( PAWN)   769.2308     0.0000000
  16.          PRODUCE( KNIGHT)   0.000000     0.1538461
  17.          PRODUCE( BISHOP)   0.000000     0.7692297E-01
  18.            PRODUCE( KING)   230.7692     0.0000000
  19.   FORMULA( PEANUTS, PAWN)   15.00000     0.0000000
  20. FORMULA( PEANUTS, KNIGHT)   10.00000     0.0000000
  21. FORMULA( PEANUTS, BISHOP)   6.000000     0.0000000
  22.   FORMULA( PEANUTS, KING)   2.000000     0.0000000
  23.   FORMULA( CASHEWS, PAWN)   1.000000     0.0000000
  24. FORMULA( CASHEWS, KNIGHT)   6.000000     0.0000000
  25. FORMULA( CASHEWS, BISHOP)   10.00000     0.0000000
  26.   FORMULA( CASHEWS, KING)   14.00000     0.0000000

  27.            Row    Slack or Surplus      Dual Price
  28.              1            2692.308        1.000000
  29.              2            0.000000        1.769231
  30.              3            0.000000        5.461538

  31. : !Generate a SOLU report for PRODUCE
  32. : SOLU PRODUCE

  33.                 Variable       Value  Reduced Cost
  34.           PRODUCE( PAWN)    769.2308     0.0000000
  35.         PRODUCE( KNIGHT)    0.000000     0.1538461
  36.         PRODUCE( BISHOP)    0.000000     0.7692297E-01
  37.           PRODUCE( KING)    230.7692     0.0000000

  38. : !Now add a header and use a wildcard
  39. : SOLU 'PRODUCTION QUANTITIES' PROD*

  40. PRODUCTION QUANTITIES
  41.         769.2308
  42.         0.000000
  43.         0.000000
  44.         230.7692
复制代码
这是我找到的帮助文档,因为英语不是很好,只明白大概:
SOLU ['header_text'] [var_or_row_names]
如果没有两个可选参数,那么就是默认输出,和我得到的结果一样。
如果有参数:header_text,则输出以该参数为变量名的变量与结果。
如果有参数:var_or_row_names,则可控制输出的行与列。

但是我还是不会用。
我在原程序下面加上了:
  1. solu AA
复制代码
想只输出AA变量,但会有下面的问题:
D:\2015-07-28_10-50-19.png
还请大家再帮我指导一二。

2015-07-28_10-58-35.png (18.59 KB, 下载次数: 273)

2015-07-28_10-58-35.png


作者: gf2015    时间: 2015-7-28 10:50
本帖最后由 gf2015 于 2015-7-28 10:58 编辑

发现直接回复没办法上传图片。






作者: gf2015    时间: 2015-7-28 10:54
liwenhui 发表于 2015-7-28 09:34
有三个函数也许可以帮你定制你自己的输出,一个叫@solu,一个叫@divert,以及@write

谢谢你的指导,但是@solu这个函数能帮我再讲清楚一点吗?
具体的用法我还是不会。

作者: liwenhui    时间: 2015-7-28 12:35
gf2015 发表于 2015-7-28 10:54
谢谢你的指导,但是@solu这个函数能帮我再讲清楚一点吗?
具体的用法我还是不会。

@solu需要在calc区域使用,所以你要先把你的模型定义一个子模型,然后在calc区域调用,比如你只想在输出结果中显示变量AI,那么你可以在calc区域写 @solu(0,AI)。

作者: liwenhui    时间: 2015-7-28 12:43
gf2015 发表于 2015-7-28 10:54
谢谢你的指导,但是@solu这个函数能帮我再讲清楚一点吗?
具体的用法我还是不会。

怎么不显示回复结果呢?论坛出问题了?

作者: gf2015    时间: 2015-7-28 12:54
liwenhui 发表于 2015-7-28 12:43
怎么不显示回复结果呢?论坛出问题了?

什么意思?你的回复就是
有三个函数也许可以帮你定制你自己的输出,一个叫@solu,一个叫@divert,以及@write

还有其他的吗?

作者: wujianjack2    时间: 2015-7-29 19:33
   lingo自带的例子soduku以及稍高版本中的graphpsn中有一些用法可以看看。
   总的来说,输出函数有table, write, writefor, format, newline等等,
   solu这是command script中的用法,不是常用的lingo script中的,与之类似的有nonz等等。

作者: liwenhui    时间: 2015-7-31 22:19
wujianjack2 发表于 2015-7-29 19:33
lingo自带的例子soduku以及稍高版本中的graphpsn中有一些用法可以看看。
   总的来说,输出函数有table ...

正解





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