数学建模社区-数学中国

标题: 求助各位高手,这一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