数学建模社区-数学中国

标题: 关于lingo模型的理解不透彻 [打印本页]

作者: 数学不烦    时间: 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;奇怪的是我又在书上看多一个程序,如图: 图片1.png 。它却可以把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
也是刚接触 多多交流

那楼主中的问题里  patterns(needs,cuts):r      这个  r(i,j)有值吗?   还是全部为0。  如果不为0,则数值代表什么意义呢?
作者: 袁海亮    时间: 2013-8-1 09:15
本帖最后由 袁海亮 于 2013-8-1 10:15 编辑
数学不烦 发表于 2013-8-1 01:18
那楼主中的问题里  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
r  是衍生集合的属性  在DATA 初始化时,如果没有对其赋值,全是 0


朋友,我还有一个问题,“默认使用衍生集合里面的值”   能根据上面的数据,列出r(i,j)的全部值吗?   因为我想在数据中感悟,理解。谢谢你
作者: 袁海亮    时间: 2013-8-1 09:59
本帖最后由 袁海亮 于 2013-8-1 10:37 编辑
数学不烦 发表于 2013-8-1 09:37
朋友,我还有一个问题,“默认使用衍生集合里面的值”   能根据上面的数据,列出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
作者: 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
patterns没有赋值,当然值都是0了,你要做为参数使用的话,就要在data段赋值,如果是做为变量使用的话,就不 ...

哈哈,谢谢你的金言,学习了!




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