当前位置:   article > 正文

数学建模的LINGO基础_lingo用abs函数求绝对值的和

lingo用abs函数求绝对值的和

  LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,由美国LINDO系统公司(Lindo System Inc.)推出的,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等。

  下面介绍一下我从网上总结学习到的一些lingo知识:

  内置函数:

  • @bin(x):限制x只能为0或1,通常在0-1规划中使用
  • @gin(x):限制x只能为整数
  • @free(x):在lingo软件中,x默认为负数,使用@free(x)可以取消x非负数的限制。
  • @abs(x):取x的绝对值
  • @exp(x):返回e^x的值
  • @sin(x),@cos(x),@tan(x):返回对应三角函数的值 

   下面通过几个例题来实际介绍一下这些内置函数

第一题:

在lingo软件中,默认变量的值是大于等于零的,所以第四个约束条件可以省略不写,代码如下:

  1. MODEL:
  2. MAX =4*X1+3*X2;
  3. 2*X1+X2<=10;
  4. X1+X2<=8;
  5. X2<=7;
  6. END

运行结果如下:

即X1=2,X2=6的时候,取得目标函数的最大值。 

 第二题:要求X1,X2均为整数:

在整数的要求下,可以使用@gin(x)这个函数,它要求变量X必须是整数。

  1. MODEL:
  2. MAX=40*X1+90*X2;
  3. 9*X1+7*X2<=56;
  4. 7*X1+20*X2<=70;
  5. @gin(X1);@gin(X2);
  6. END

运行截图:

第三题:0-1规划问题:要求变量只能是0或1。

Lingo软件提供了@bin(x)这个函数,它规定了变量只能是0或者1这两个量。

  1. MODEL:
  2. MAX=X1*X1+0.4*X2+0.8*X3+1.5*X4;
  3. 3*X1+2*X2+6*X3+10*X4<=10;
  4. @BIN(X1);@BIN(X2);@BIN(X3);@BIN(X4);
  5. END

 第四题:非线性规划问题:

 在lingo软件中,提供了绝对值函数@abs,可以直接使用来表示目标函数。

 代码如下:

  1. MODEL:
  2. MIN=@ABS(X1)+2*@ABS(X2)+3*@ABS(X3)+4*@ABS(X4);
  3. X1-X2-X3+X4=0;
  4. X1-X2+X3-3*X4=1;
  5. X1-X2-2*X3+3*X4=-0.5;
  6. END

 运行截图如下:

  LINGO一个重要特质就是集合(SETS):分为原始集和派生集:

  具体的格式为:

  原始集名/1.2.3...n/:属性1,属性2,属性3;

  派生集名(原始集名1,原始集名2):属性1,属性2;

  其中集合操作函数有:@SUM,@FOR,@PROD等等。

  利用lingo解决指派问题:已经知道下列工人完成指定的工作时间如下表:

  1. MODEL:
  2. SETS:
  3. VAR/1..4/; !定义一个原始集;
  4. LINK(VAR,VAR):C,X; !定义一个4*4的派生集,即为指派数组;
  5. ENDSETS
  6. DATA:
  7. C=15 18 21 24
  8. 19 23 22 18
  9. 26 17 16 19
  10. 19 21 23 17;
  11. ENDDATA
  12. MIN=@SUM(LINK:C*X);
  13. @FOR(VAR(I):@SUM(VAR(J):X(I,J))=1); !每一个工作都有人解决;
  14. @FOR(VAR(J):@SUM(VAR(I):X(I,J))=1); !每一个人都有工作做;
  15. @FOR(LINK:@BIN(X));
  16. END

 运行截图如下所示:

即:甲——B,乙——A,丁——C,丙——D.

用LINGO解决0-1背包问题:

给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个,规定重量不能超过8,价值和重量如下:

v[]={2,1,4,3,5};
w[]={1,4,2,3,5};

代码如下:

  1. MODEL:
  2. SETS:
  3. JIHE/1..5/:VALUE,WEIGHT,CHOOSE;
  4. ENDSETS
  5. DATA:
  6. VALUE=2,1,4,3,5;
  7. WEIGHT=1,4,2,3,5;
  8. ENDDATA
  9. MAX=@SUM(JIHE:VALUE*CHOOSE);
  10. @SUM(JIHE:WEIGHT*CHOOSE)<=11;
  11. @FOR(JIHE:@BIN(CHOOSE));
  12. END

运行截图如下:

表示选择1,3,4,5的时候,总价值最大。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/788456
推荐阅读
相关标签
  

闽ICP备14008679号