数学不烦 发表于 2013-7-31 11:02

关于lingo模型的理解不透彻

model:

sets:
needs/1..4/:length,num;
cuts/1..3/:x;
patterns(needs,cuts):r;
endsets

data:
length=4 5 6 8;
num =  50 10 20 15;
x = 1 2 3;
enddata

min=@sum(patterns(i,j):r(i,j));
@for(cuts(i): @sum(needs(j):r(j,i))<6;);
@for(needs(j): @sum(cuts(i):r(i,j))<6;);

end


如上面的程序
有几个疑问:  1、在needs 和 cuts 的基础上再定义集合patterns   那么这个集合据说有 4*3 个元素, 然后我想看看里面的元素值是各是什么,但结果显示  全是0;奇怪的是我又在书上看多一个程序,如图:。它却可以把c(i,j)*式子。这样不是白费力气吗?  因为c(i,j)不是全部为0吗?  它又没有赋值过?  为什么?
                       2、如两个限制条件,分别把  cuts  与 needs  交换位置  那么结果是一样  还是有所区别呢?
                       3、在编写代码过程中,有没有好像java  c# 那些通过快捷键快速得到变量名称呢?

真心不理解第一个疑问,patterns的含义  和  元素的值  是怎样理解的 。

袁海亮 发表于 2013-7-31 21:15

model:

!集合定义部分;
sets:
needs/1..4/:length,num;!needs集合的名称,1,2,3,4集合内的成员,length,num是集合的属性,可以看成是一个一维数组。;
cuts/1..3/:x;
patterns(needs,cuts):r;!衍生(派生)集合,patterns集合的名称,needs,cuts初始集合,r衍生集合的属性;
endsets

!数据的初始化;
data:
length=4 5 6 8;
num =  50 10 20 15;
x = 1 2 3;
enddata

!目标函数和约束条件;
min=@sum(patterns(i,j):r(i,j)); !目标函数 此处@sum的第一个参数patterns(i,j),表示求和运算对衍生集合patterns进行,该集合是二维的,共有12个成员;
@for(cuts(i): @sum(needs(j):r(i,j)<6;);!for生成一个约束表达式,他有两个参数,第一个是集合名,表示对该集合的所有成员声称对应的约束表达式,
第二个参数是约束表达式的具体内容,此处在调用@sum函数,表示对约束表达式的左边是求和,是对needs的4个成员,并且对表达式r(i,j)中的第二维J求和;
@for(needs(j): @sum(cuts(i):r(i,j))<6;);

end

袁海亮 发表于 2013-7-31 22:33

也是刚接触 多多交流

数学不烦 发表于 2013-8-1 01:18

袁海亮 发表于 2013-7-31 22:33 static/image/common/back.gif
也是刚接触 多多交流

那楼主中的问题里  patterns(needs,cuts):r      这个  r(i,j)有值吗?   还是全部为0。  如果不为0,则数值代表什么意义呢?

袁海亮 发表于 2013-8-1 09:15

本帖最后由 袁海亮 于 2013-8-1 10:15 编辑

数学不烦 发表于 2013-8-1 01:18 static/image/common/back.gif
那楼主中的问题里  patterns(needs,cuts):r      这个  r(i,j)有值吗?   还是全部为0。  如果不为 ...

r  是衍生集合的属性  在DATA 初始化时,如果没有对其赋值,全是 0  

数学不烦 发表于 2013-8-1 09:37

本帖最后由 袁海亮 于 2013-8-1 10:16 编辑

袁海亮 发表于 2013-8-1 09:15 static/image/common/back.gif
r  是衍生集合的属性  在DATA 初始化时,如果没有对其赋值,全是 0

朋友,我还有一个问题,“默认使用衍生集合里面的值”   能根据上面的数据,列出r(i,j)的全部值吗?   因为我想在数据中感悟,理解。谢谢你

袁海亮 发表于 2013-8-1 09:59

本帖最后由 袁海亮 于 2013-8-1 10:37 编辑

数学不烦 发表于 2013-8-1 09:37 static/image/common/back.gif
朋友,我还有一个问题,“默认使用衍生集合里面的值”   能根据上面的数据,列出r(i,j)的全部值吗?   ...

0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
亲 无临时无法给你上传图片  你研究一下 这段代码

model:

sets:
WH/w1..w6/:AI;
VD/v1..v8/:DJ;
links(WH,VD):c,x;
endsets

data:
AI=60,55,51,43,41,52;
DJ=35,37,22,32,41,32,43,38;
!c=6,2,6,7,4,2,5,9
  4,9,5,3,8,5,8,2
  5,2,1,9,7,4,3,3
  7,6,7,3,9,2,7,1
  2,3,9,5,7,2,6,5
  5,5,2,2,8,1,4,3;
c=0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0;
enddata

min=@sum(links(i,j):c(i,j)*x(i,j));!目标函数;
@for(WH(i):@sum(VD(j):x(i,j))<AI(i));!约束条件;
@for(VD(j):@sum(WH(i):x(i,j))=DJ(j));
end

发表于 1970-1-1 08:00

madio 发表于 2013-8-1 10:10

patterns没有赋值,当然值都是0了,你要做为参数使用的话,就要在data段赋值,如果是做为变量使用的话,就不用赋值,lingo也会求解出值来,至于第二个问题,你要将 cuts  与 needs  交换位置结果肯定是不一样的,因为一个是求和@sum的范围,一个是@for循环的范围,换了连约束条件的个数都不一样多。

数学不烦 发表于 2013-8-1 11:21

madio 发表于 2013-8-1 10:10 static/image/common/back.gif
patterns没有赋值,当然值都是0了,你要做为参数使用的话,就要在data段赋值,如果是做为变量使用的话,就不 ...

哈哈,谢谢你的金言,学习了!
页: [1]
查看完整版本: 关于lingo模型的理解不透彻