数学建模社区-数学中国
标题:
求助各位高手,这一lingo问题关系我的下半生幸福。。。
[打印本页]
作者:
guet71353
时间:
2010-10-13 18:42
标题:
求助各位高手,这一lingo问题关系我的下半生幸福。。。
一个超简单的线性规划问题的表述,如下:
给出的六个数与指定的数值(如100)之间的差值最小,且差值为非负数(即最小只能是0),六个数有大小限制(已给出),且后一个数一定大于前一个数,没有重复值,且都为整数,不允许出现小数。
我按照要求构建数学模型:
min fx=x1+x2+x3+x4+x5+x6-100
st.
1<=x1<=20
2<=x2<=28
3<=x3<=29
5<=x4<=31
7<=x5<=32
11<=x6<=33
x2-x1>0
x3-x2>0
x4-x3>0
x5-x4>0
x6-x5>0
x1+x2+x3+x4+x5+x6-100>=0
x1,x2,x3,x4,x5,x6属于整数
由表述来看,该问题肯定有多个最优解,比如1,6,12,18,31,32和2,5,12,18,31,32就是解集之一。
但我刚学lingo,不会编写上面的语句,希望能在lingo中列出全部符合要求的X的值。。。
顺便说一句,用的是9.0版的,望高手给出编程方案,谢谢:)
作者:
bloodshell
时间:
2010-10-13 19:11
lingo不会给出全部解的 用MATLAB吧
作者:
buct
时间:
2010-10-13 20:36
Lingo解决下半生?求解释!
作者:
guoshaoming
时间:
2010-10-13 20:45
下面这段LINGO代码可以求出你所述问题的一个最优解:
model:
min=x1+x2+x3+x4+x5+x6-100;
1<=x1;
x1<=20;
2<=x2;
x2<=28;
3<=x3;
x3<=29;
5<=x4;
x4<=31;
7<=x5;
x5<=32;
11<=x6;
x6<=33;
x2-x1>0;
x3-x2>0;
x4-x3>0;
x5-x4>0;
x6-x5>0;
x1+x2+x3+x4+x5+x6-100>=0;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
end
至于求多组最优解,恕本人才疏学浅,希望有高人能帮你解决!
作者:
guet71353
时间:
2010-10-13 21:07
谢谢楼上的朋友,但是结果中有重复的数呢。。。
Global optimal solution found.
Objective value: 0.000000
Extended solver steps: 0
Total solver iterations: 3
Variable Value Reduced Cost
X1 2.000000 1.000000
X2 2.000000 1.000000
X3 3.000000 1.000000
X4 29.00000 1.000000
X5 32.00000 1.000000
X6 32.00000 1.000000
这是程序结果。。。2,2,29,32,32有重复的2,32两个数
作者:
guet71353
时间:
2010-10-13 21:29
我根据上面朋友的启发修改了下,但只得到一组解,郁闷中。。。
程序如下:
min=x1+x2+x3+x4+x5-100;
x1>=1;
x1<=5;
x2>=6;
x2<=12;
x3>=18;
x3<=22;
x4>=23;
x4<=28;
x5>=30;
x5<=35;
x1+x2+x3+x4+x5-100>=0;
x2-x1>0;
x3-x2>0;
x4-x3>0;
x5-x4>0;
x6-x5>0;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
Variable Value Reduced Cost
X1 5.000000 1.000000
X2 12.00000 1.000000
X3 22.00000 1.000000
X4 28.00000 1.000000
X5 33.00000 1.000000
X6 35.00000 0.000000
作者:
guoshaoming
时间:
2010-10-13 22:07
不好意思,没看到题目要求没有重复值
作者:
sdfos
时间:
2010-10-14 01:17
本帖最后由 sdfos 于 2010-10-15 00:25 编辑
不会解线性规划,用穷举法试了一下,楼主看看行不行吧
x1=[1:20];
x2=[2:28];
x3=[3:29];
x4=[5:31];
x5=[7:32];
x6=[11:33];
R=zeros(3000,6);
p=1;
q=1;
for i=1:20
for j=1:27
for k=1:27
for l=1:27
for m=1:26
for n=1:23
if x1(i)<x2(j)&&x2(j)<x3(k)&&x3(k)<x4(l)&&x4(l)<x5(m)&&x5(m)<x6(n)&&x1(i)+x2(j)+x3(k)+x4(l)+x5(m)+x6(n)-100==0
s(p)=x1(i)+x2(j)+x3(k)+x4(l)+x5(m)+x6(n)-100;
R(q,
=[x1(i) x2(j) x3(k) x4(l) x5(m) x6(n)];
q=q+1;
p=p+1;
end
end
end
end
end
end
end
前10组结果
1 2 16 26 27 28
1 2 17 25 27 28
1 2 18 24 27 28
1 2 18 25 26 28
1 2 19 23 27 28
1 2 19 24 26 28
1 2 19 25 26 27
1 2 20 22 27 28
1 2 20 23 26 28
1 2 20 24 25 28
作者:
guet71353
时间:
2010-10-14 03:13
其实只要数据能出来,什么方法都成,想问一下楼上的朋友,是用matlab写的吧
作者:
guet71353
时间:
2010-10-14 06:47
另 R(q,=[x1(i) x2(j) x3(k) x4(l) x5(m) x6(n)];
该语句好像不完全,我的matlab提示出错呢
作者:
sdfos
时间:
2010-10-14 11:33
本帖最后由 sdfos 于 2010-10-14 12:31 编辑
不好意思,漏了个括号,应该是R(q,: )=[x1(i) x2(j) x3(k) x4(l) x5(m) x6(n)];
作者:
guet71353
时间:
2010-10-14 22:31
回复
sdfos
的帖子
我想把这些数据存到excel该怎么操作??
我调试的还是出现了错误
??? R(q,: )=[x1(i) x2(j) x3(k) x4(l) x5(m) x6(n)];
|
Error: The input character is not valid in MATLAB statements or expressions.
作者:
sdfos
时间:
2010-10-15 00:41
回复
guet71353
的帖子
最简单的方法,把第一个循环分成三段,比如说1~3 4~6 7~20 直接从工作空间拷过去就行了
作者:
linmatsas
时间:
2010-10-15 10:55
回复
guet71353
的帖子
要点回复呀…………要不他看不见你回复他了……这是MATLAB程序……
数学中国就这点不好……括号总会变成表情……那是R(q)……存的是最优解集合…不能重复加一个条件就好了~~~
作者:
guet71353
时间:
2010-10-15 17:11
回复
linmatsas
的帖子
请教下加的什么条件才能看到那个矩阵,想把该矩阵导出到EXCEL中
作者:
linmatsas
时间:
2010-10-15 22:10
回复
guet71353
的帖子
最简单的是你直接点变量空间里的R~~可以看见,可以直接在命令窗口输入R就行了~~写到excel中的指令是xlswrite,帮助文件里有例子~~
作者:
yn120
时间:
2010-11-9 14:17
lingo软件只能求出一个最优解(如果能求出的话),不可能穷举出全部的解。即:lingo只能找到最小(大)值和一个最小(大)值点,不能找出全部最小(大)值点。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5