【高分求】运筹学,可以用单纯形法解,或者用Matlab算出来也行。
这道题是自己编的,是期末作业。其中的数据可能不太合理。如果有大神愿意修改或指教其中的一些地方,感激不尽。求解越详细越好!或者加我QQ:1019893218,跟我私聊也行。...
这道题是自己编的,是期末作业。其中的数据可能不太合理。如果有大神愿意修改或指教其中的一些地方,感激不尽。求解越详细越好!或者加我QQ:1019893218,跟我私聊也行。
这是我列的式子,不知道有没有错,求单纯形法全解 展开
这是我列的式子,不知道有没有错,求单纯形法全解 展开
2个回答
展开全部
用mathematica可以直接整数规划:
Module[{cast, value, varx, con0, con1, con2, cons, obj, ans},
cast = {5.5, 8.5, 5.4, 11.4, 30, 29.5};
value = {60, 65, 60, 70, 75, 73};
varx = Array[x, 6];
con0 = # >= 0 & /@ varx;
con1 = {x[1] + x[2] + x[3] >= 20, x[5] + x[6] >= 3, Total@varx == 60};
con2 = {varx.cast <= 450};
cons = Join[con0, con1, con2];
obj = varx.value;
ans = Maximize[obj, cons, varx, Integers]
]
结果为:
{3730., {x[1] -> 0, x[2] -> 1, x[3] -> 48, x[4] -> 8, x[5] -> 3, x[6] -> 0}}
一点建议,如果觉得这样太简单了,可以加上这样的假设:一天之内连续两顿都在同一家食堂/饭馆吃饭的话满意度只有80%(这个数可以自行修改),如此则需要36个未知数,结果会有趣得多:-P。不过如果校外两家的参数不做修改的话会始终是x[5]=3,x[6]=0。
Module[{cast, value, varx, con0, con1, con2, cons, obj, ans},
cast = {5.5, 8.5, 5.4, 11.4, 30, 29.5};
value = {60, 65, 60, 70, 75, 73};
varx = Array[x, 6];
con0 = # >= 0 & /@ varx;
con1 = {x[1] + x[2] + x[3] >= 20, x[5] + x[6] >= 3, Total@varx == 60};
con2 = {varx.cast <= 450};
cons = Join[con0, con1, con2];
obj = varx.value;
ans = Maximize[obj, cons, varx, Integers]
]
结果为:
{3730., {x[1] -> 0, x[2] -> 1, x[3] -> 48, x[4] -> 8, x[5] -> 3, x[6] -> 0}}
一点建议,如果觉得这样太简单了,可以加上这样的假设:一天之内连续两顿都在同一家食堂/饭馆吃饭的话满意度只有80%(这个数可以自行修改),如此则需要36个未知数,结果会有趣得多:-P。不过如果校外两家的参数不做修改的话会始终是x[5]=3,x[6]=0。
追问
主要是我没有matlab这个软件,你给你建议非常好,能把你的企鹅给我一下吗?或者加我为企鹅好友,有些问题我想继续请教!
追答
我极少上企鹅,我们可以在这继续交流,也可私信或邮箱,如果你对这门语言有兴趣的话可以去贴吧看看,人气还算可以,运筹学方面我是自学的,怕是我向你请教更多一些^^
展开全部
既然你公式已经列出来了,那就直接将它转换为matlab代码就可以了,matlab中使用linprog函数来进行先行规划求解,代码如下:
clc
clear
c = [60;65;60;70;75;73];
a = [5.5,8.5,5.4,11.4,30,29.5;
-1,-1,-1,0,0,0;
0,0,0,0,-1,-1;
];
b=[450;-20;-3];
aeq = [1,1,1,1,1,1];
beq = [60];
x = linprog(-c,a,b,aeq,beq,zeros(6,1))
value = c'*x
运行结果如下:
x =
0.0000
0.0000
48.3000
8.7000
3.0000
0.0000
value =
3.7320e+003
>>
你可能注意到了,这里的x是次数,所以,x的值不应该有小数的情况,所以需要使用整数规划,整数规划最好使用lingo软件,专门用于解决规划问题,你可以试试。
clc
clear
c = [60;65;60;70;75;73];
a = [5.5,8.5,5.4,11.4,30,29.5;
-1,-1,-1,0,0,0;
0,0,0,0,-1,-1;
];
b=[450;-20;-3];
aeq = [1,1,1,1,1,1];
beq = [60];
x = linprog(-c,a,b,aeq,beq,zeros(6,1))
value = c'*x
运行结果如下:
x =
0.0000
0.0000
48.3000
8.7000
3.0000
0.0000
value =
3.7320e+003
>>
你可能注意到了,这里的x是次数,所以,x的值不应该有小数的情况,所以需要使用整数规划,整数规划最好使用lingo软件,专门用于解决规划问题,你可以试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询