
请问这两个语句有什么区别啊?我正参加我们学校的数学建模,用lingo求解时出现了问题,拜托帮下忙啊!!
1。min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-a(i))+30*@abs(y1-b(j)))+d2(i,j)*(20*@abs(...
1。min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-a(i))+30*@abs(y1-b(j)))+d2(i,j)*(20*@abs(x2-a(i))+30*@abs(y2-b(j))));.
2. min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-(a(i)-0.5))+30*@abs(y1-(b(j)-0.5)))+d2(i,j)*@abs(20*(x2-(a(i)-0.5))+30*@abs(y2-(b(j)-0.5))));
我在data里面定义a和b,前面的和后面的刚好相差0.5,如1是a=0.5,1.5;b=0.5,1.5;而2是a=1,2;b=1,2;可为什么这两个算出来的结果不一样呢?
再附上整个程序吧
model:
sets:
demad/1..6/:a;
step/1..12/:b;
assigin(demad,step):c,d1,d2;
endsets
data:
c=4,2,5,2,1,0,6,4,2,3,1,2
3,4,3,1,2,3,1,6,5,4,2,3
1,2,5,0,4,0,2,5,0,0,2,3
2,1,0,0,2,1,2,6,0,2,1,4
3,5,6,4,3,1,2,4,0,1,5,1
4,1,1,2,2,3,1,0,1,2,4,3;
a=1.5,2.5,3.5,4.5,5.5,6.5;
b=1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5;
enddata
min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-a(i))+30*@abs(y1-b(j)))+d2(i,j)*(20*@abs(x2-a(i))+30*@abs(y2-b(j))));
x1<7;
y1<13;
x2<7;
y2<13;
@for(assigin(i,j):d1(i,j)+d2(i,j)=c(i,j));
@gin(x1);@gin(y1);@gin(x2);@gin(y2); 展开
2. min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-(a(i)-0.5))+30*@abs(y1-(b(j)-0.5)))+d2(i,j)*@abs(20*(x2-(a(i)-0.5))+30*@abs(y2-(b(j)-0.5))));
我在data里面定义a和b,前面的和后面的刚好相差0.5,如1是a=0.5,1.5;b=0.5,1.5;而2是a=1,2;b=1,2;可为什么这两个算出来的结果不一样呢?
再附上整个程序吧
model:
sets:
demad/1..6/:a;
step/1..12/:b;
assigin(demad,step):c,d1,d2;
endsets
data:
c=4,2,5,2,1,0,6,4,2,3,1,2
3,4,3,1,2,3,1,6,5,4,2,3
1,2,5,0,4,0,2,5,0,0,2,3
2,1,0,0,2,1,2,6,0,2,1,4
3,5,6,4,3,1,2,4,0,1,5,1
4,1,1,2,2,3,1,0,1,2,4,3;
a=1.5,2.5,3.5,4.5,5.5,6.5;
b=1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5;
enddata
min=@sum(assigin(i,j):d1(i,j)*(20*@abs(x1-a(i))+30*@abs(y1-b(j)))+d2(i,j)*(20*@abs(x2-a(i))+30*@abs(y2-b(j))));
x1<7;
y1<13;
x2<7;
y2<13;
@for(assigin(i,j):d1(i,j)+d2(i,j)=c(i,j));
@gin(x1);@gin(y1);@gin(x2);@gin(y2); 展开
2个回答
展开全部
你这个是非线性的 所以得到的是局部最优解 局部最优解跟初始的值是有关的 所以解可能不同
你都用global solver试一下吧
你都用global solver试一下吧
追问
关键是我那两个式子他是等价的呀,只不过一个是在里面减去0.5,一个是在外面减去0.5而已,为什么会出现结果不一样的状况呢?
追答
我已经说了 你用global solver试试 这个给出的解是局部解 有多个不奇怪
而且你这个问题应该不需要用lingo 只要为每一组a和b配上相应的x和y就行了 你写的这样非线性太强用lingo解是很可能有问题的
展开全部
你要明白lingo求解的内部机理。因为你这个问题是非线性问题。而对于非线性问题,lingo求出的问题未必是全局最优解。最小化的非线性模型,它可以有若干个局部最优解(Local optimal solution found.)。所谓局部最优解就是在他附近不会出现比它更好的解。但是,在它稍远点的地方可能出现比它更好的解,当然可能比它更好的解可能存在也可能不存在。所以你两个语句会出现不同的结果。
你可以采取如下改进方法:
为变量补充初始值,因为初始值越接近最优解,求解越快,值越好。
简化约束中的关系。
减少整数约束。将整数约束去掉,求解模型,然后就将解答取整后作为原问题的解答。然后在整数解附近找取整后的最优解。
你可以采取如下改进方法:
为变量补充初始值,因为初始值越接近最优解,求解越快,值越好。
简化约束中的关系。
减少整数约束。将整数约束去掉,求解模型,然后就将解答取整后作为原问题的解答。然后在整数解附近找取整后的最优解。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询