如何在lingo中使用集合1

loading 分享 2026-7-19 下载文档

.

例题1. 在lingo中输入下列线性规划模型,并求解

min z??(i,j)?Ad(i,j)?x(i,j)

s.t.

?x(1,j)?1,

j?V?x(i,j)?1,j?1,i?V 所有x(i,j)为非负实数,

x(i,i)?0,i?VV?{1,2,?,10},A?V?V, d的数值如下表:

d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 15 15 16 11 11 10 0;

分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo中集合的建立

新建lingo文件 输入下面内容

model: sets:

V/1..10/;!创建集合V;

A(V,V):d,x;!创建集合A是V乘V.而d,x是与A同结构的,即d,x分别是10*10矩阵; endsets

min=sum(A(i,j):d(i,j)*x(i,j));!创建目标函数; sum(V(j):x(1,j))>=1; !第一个约束条件; for(V(j)|j#gt#1:

!i#gt#1为逻辑判断语句表示i>1是返回真值,但这里不能直接写i>1,因为\是关系运算符不是逻辑运算符;

sum(V(i):x(i,j))=1;); !利用循环函数表达:当i>1(即i从2到10)时,{x(i,j):j=1..10}的和等于1; for(V(i):x(i,i)=0;);

.

.

data:

d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10

22 22 17 15 15 16 11 11 10 0; !输入d的数值; enddata end

这个模型如果按照常规输入是什么样子呢? Lingo也提供这样的功能 点lingo菜单

选generate点display model 得到下面的界面(部分截图)

.

.

可见,这个规划如果普通输入的话,工作量是很大的,而且容易出错。 运行结果(部分截图)

.

.

这个报告很不简洁,因为我们只需要显示x中非零部分,其他信息都不是我们关心的。 有什么办法可以使得报告更简洁?

点lingo菜单,选solution,做如下设置,可以使得报告更加简洁

.

.

设置完后结果是

练习1. 求下列线性规划模型

max z?i,j)

(i,?d(i,j)*x(j)?As.t.

?x(i,j)?b(i),i?V

j?Vx(i,j)为非负实数,(i,j)?A

这里V={1,2,3,…,7},A?V?V. b=49 38 49 44 58 50 47;

d=1 2 3 1 2 1 2 2 3 4 1 2 2 3 4 1 1 2 1 5 1 1 2 2 2 3 1 1 2 1 2 3 5 3 1 2 2 2 1 3 2 4 1 1 1 1 2 1 1;

参考答案

.


如何在lingo中使用集合1.doc 将本文的Word文档下载到电脑
搜索更多关于: 如何在lingo中使用集合1 的文档
相关推荐
相关阅读