gf2015 发表于 2015-7-27 23:30

Lingo输出的问题

本帖最后由 gf2015 于 2015-7-27 23:30 编辑

data:  !手动输入各种车的数量;
    Car1=?;
    Car2=?;
    Car3=?;
enddata

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

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

min=Z;

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

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

@for(A(I):@bnd(0,aa(I),50));
@for(B(I):@bnd(0,bb(I),50));
@for(C(I):@bnd(0,cc(I),50));
@for(D(I):@bnd(0,dd(I),50));
@for(E(I):@bnd(0,ee(I),50));

@for(A(I):@gin(aa(I)));
@for(B(I):@gin(bb(I)));
@for(C(I):@gin(cc(I)));
@for(D(I):@gin(dd(I)));
@for(E(I):@gin(ee(I)));
!对运量的约束;
@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;
@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;
@sum(A(I):AIII(I)*aa(I))+@sum(C(I):CIII(I)*cc(I))>=Car3;

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

!目标值;

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


我想请问的是:怎样才能使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:: TAKE CHESS.LNG
: TERSE
: GO

Global optimal solution found at step:         0
Objective value:                       2692.308

: !Generate a standard SOLU report
: SOLU

                 Variable      Value  Reduced Cost
         SUPPLY( PEANUTS)   750.0000     0.0000000
         SUPPLY( CASHEWS)   250.0000     0.0000000
             PRICE( PAWN)   2.000000     0.0000000
           PRICE( KNIGHT)   3.000000     0.0000000
           PRICE( BISHOP)   4.000000     0.0000000
             PRICE( KING)   5.000000     0.0000000
           PRODUCE( PAWN)   769.2308     0.0000000
         PRODUCE( KNIGHT)   0.000000     0.1538461
         PRODUCE( BISHOP)   0.000000     0.7692297E-01
           PRODUCE( KING)   230.7692     0.0000000
  FORMULA( PEANUTS, PAWN)   15.00000     0.0000000
FORMULA( PEANUTS, KNIGHT)   10.00000     0.0000000
FORMULA( PEANUTS, BISHOP)   6.000000     0.0000000
  FORMULA( PEANUTS, KING)   2.000000     0.0000000
  FORMULA( CASHEWS, PAWN)   1.000000     0.0000000
FORMULA( CASHEWS, KNIGHT)   6.000000     0.0000000
FORMULA( CASHEWS, BISHOP)   10.00000     0.0000000
  FORMULA( CASHEWS, KING)   14.00000     0.0000000

           Row    Slack or Surplus      Dual Price
             1            2692.308        1.000000
             2            0.000000        1.769231
             3            0.000000        5.461538

: !Generate a SOLU report for PRODUCE
: SOLU PRODUCE

                Variable       Value  Reduced Cost
          PRODUCE( PAWN)    769.2308     0.0000000
        PRODUCE( KNIGHT)    0.000000     0.1538461
        PRODUCE( BISHOP)    0.000000     0.7692297E-01
          PRODUCE( KING)    230.7692     0.0000000

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

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

但是我还是不会用。
我在原程序下面加上了:solu AA想只输出AA变量,但会有下面的问题:
D:\2015-07-28_10-50-19.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 static/image/common/back.gif
有三个函数也许可以帮你定制你自己的输出,一个叫@solu,一个叫@divert,以及@write

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

liwenhui 发表于 2015-7-28 12:35

gf2015 发表于 2015-7-28 10:54 static/image/common/back.gif
谢谢你的指导,但是@solu这个函数能帮我再讲清楚一点吗?
具体的用法我还是不会。

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

liwenhui 发表于 2015-7-28 12:43

gf2015 发表于 2015-7-28 10:54 static/image/common/back.gif
谢谢你的指导,但是@solu这个函数能帮我再讲清楚一点吗?
具体的用法我还是不会。

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

gf2015 发表于 2015-7-28 12:54

liwenhui 发表于 2015-7-28 12:43 static/image/common/back.gif
怎么不显示回复结果呢?论坛出问题了?

什么意思?你的回复就是
有三个函数也许可以帮你定制你自己的输出,一个叫@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 static/image/common/back.gif
lingo自带的例子soduku以及稍高版本中的graphpsn中有一些用法可以看看。
   总的来说,输出函数有table ...

正解
页: [1]
查看完整版本: Lingo输出的问题