
数学建模,线性规划……某公司有三个加工厂,某月公司接到4份分别来自于A,B,C,D客户,,,2394896864@qq 100
3、某公司有三个加工厂,某月公司接到4份分别来自于A,B,C,D客户的订单依次为15,17,22,12件,三个加工厂开工费用(固定值,与生产量无关)和生产量及各加工厂的至...
3、某公司有三个加工厂,某月公司接到4份分别来自于A,B,C,D客户的订单依次为15,17,22,12件,三个加工厂开工费用(固定值,与生产量无关)和生产量及各加工厂的至各个客户的每件运输费用如下面两个表格所示,请制定生产和运输费用,使得总费用最小。
单件运输费用(元)
开工费用(元) 生产量
第一加工厂 91 39
第二加工厂 70 35
第三家工厂 24 31
客户A 客户B 客户C 客户D
第一加工厂 6 2 6 7
第二加工厂 4 9 5 3
第三家工厂 8 8 1 5
非诚勿扰!!!
我的邮箱2394896864@qq.com 展开
单件运输费用(元)
开工费用(元) 生产量
第一加工厂 91 39
第二加工厂 70 35
第三家工厂 24 31
客户A 客户B 客户C 客户D
第一加工厂 6 2 6 7
第二加工厂 4 9 5 3
第三家工厂 8 8 1 5
非诚勿扰!!!
我的邮箱2394896864@qq.com 展开
3个回答
展开全部
设x[i,j]为工厂i供给客户j的生产量,共12个变量.y[i]为工厂i开工的0-1变量,共3个.
目标函数自然是开工费+运输费的总和.
约束条件共3组:
第一组是3个厂的产量限制.
第二组是满足客户要求.
第三组是第i个厂是否开工.这个容易列成非线性方程.其实注意到y[i]<=x[i,j]<=工厂最大产量[i]*y[i]即可,也是线性方程.
下面是代码:(Mathematica做的,算是非主流...不过我更喜欢这样的编程方式,不容易出错)
Clear["Global`*"];
time = TimeUsed[];
(*data*)
order = {15, 17, 22, 12};
working = {90, 70, 24};
product = {39, 35, 31};
carriage = {{6, 2, 6, 7}, {4, 9, 5, 3}, {8, 8, 1, 5}};
(*variables*)
vx = Array[x, {3, 4}];
vy = Array[y, 3];
vars = Join[ Flatten[vx], vy];
(*object*)
obj = Total[ working*vy] + Total[ Flatten[ carriage*vx]];
(*subject to*)
conplus =
Table[ Part[ Flatten[ vx], i] >= 0, {i, Length[ Flatten[ vx]]}]~
Join~Table[ 0 <= vy[[i]] <= 1, {i, 3}];
con1 = Table[ Sum[ x[i, j], {i, 3}] >= order[[j]], {j, 4}];
con2 = Table[ Sum[ x[i, j], {j, 4}] <= product[[i]], {i, 3}];
con3 = Flatten[
Table[ y[i] <= x[i, j] <= product[[i]] y[i], {i, 3}, {j, 4}]];
cons = Join[ conplus, con1, con2, con3];
(*Solve*)
min = Minimize[ obj, cons, vars, Integers];
min
time = TimeUsed[] - time
运行结果为:{341, {x[1, 1] -> 14, x[1, 2] -> 16, x[1, 3] -> 1, x[1, 4] -> 4,
x[2, 1] -> 0, x[2, 2] -> 0, x[2, 3] -> 0, x[2, 4] -> 0,
x[3, 1] -> 1, x[3, 2] -> 1, x[3, 3] -> 21, x[3, 4] -> 8, y[1] -> 1,
y[2] -> 0, y[3] -> 1}}
那两句time的是我计算程序运行时间用的,我的电脑用了1.531秒.
如果觉得不好看,可以再运行这条语句:
{min[[1]], MatrixForm[vx], MatrixForm[vy]} /. min[[2]]
显示为:
14, 16, 1, 4, 1
341, 0, 0, 0, 0, 0
1, 1, 21, 8, 1
这样就容易理解了.
目标函数自然是开工费+运输费的总和.
约束条件共3组:
第一组是3个厂的产量限制.
第二组是满足客户要求.
第三组是第i个厂是否开工.这个容易列成非线性方程.其实注意到y[i]<=x[i,j]<=工厂最大产量[i]*y[i]即可,也是线性方程.
下面是代码:(Mathematica做的,算是非主流...不过我更喜欢这样的编程方式,不容易出错)
Clear["Global`*"];
time = TimeUsed[];
(*data*)
order = {15, 17, 22, 12};
working = {90, 70, 24};
product = {39, 35, 31};
carriage = {{6, 2, 6, 7}, {4, 9, 5, 3}, {8, 8, 1, 5}};
(*variables*)
vx = Array[x, {3, 4}];
vy = Array[y, 3];
vars = Join[ Flatten[vx], vy];
(*object*)
obj = Total[ working*vy] + Total[ Flatten[ carriage*vx]];
(*subject to*)
conplus =
Table[ Part[ Flatten[ vx], i] >= 0, {i, Length[ Flatten[ vx]]}]~
Join~Table[ 0 <= vy[[i]] <= 1, {i, 3}];
con1 = Table[ Sum[ x[i, j], {i, 3}] >= order[[j]], {j, 4}];
con2 = Table[ Sum[ x[i, j], {j, 4}] <= product[[i]], {i, 3}];
con3 = Flatten[
Table[ y[i] <= x[i, j] <= product[[i]] y[i], {i, 3}, {j, 4}]];
cons = Join[ conplus, con1, con2, con3];
(*Solve*)
min = Minimize[ obj, cons, vars, Integers];
min
time = TimeUsed[] - time
运行结果为:{341, {x[1, 1] -> 14, x[1, 2] -> 16, x[1, 3] -> 1, x[1, 4] -> 4,
x[2, 1] -> 0, x[2, 2] -> 0, x[2, 3] -> 0, x[2, 4] -> 0,
x[3, 1] -> 1, x[3, 2] -> 1, x[3, 3] -> 21, x[3, 4] -> 8, y[1] -> 1,
y[2] -> 0, y[3] -> 1}}
那两句time的是我计算程序运行时间用的,我的电脑用了1.531秒.
如果觉得不好看,可以再运行这条语句:
{min[[1]], MatrixForm[vx], MatrixForm[vy]} /. min[[2]]
显示为:
14, 16, 1, 4, 1
341, 0, 0, 0, 0, 0
1, 1, 21, 8, 1
这样就容易理解了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一家工厂处理客户B的订单17件=91+17*2=125
第二家工厂处理客户A与客户D的订单各15、12件=70+15*4+12*3=166
第三家工厂处理客户C的订单22件=24+22*1=46
最低共计337
第二家工厂处理客户A与客户D的订单各15、12件=70+15*4+12*3=166
第三家工厂处理客户C的订单22件=24+22*1=46
最低共计337
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
若每季度的生产费用为 f(x) = ax + bx^2(元)
设三季度分别生产x , y , 180-x-y台。
且应满足40≤x≤100,100≤x+y≤180,0≤y≤100,x,y∈N+(正整数)
a=50、b=0.2、c=4
则第一季度生产费用T1=50 x + 0.2x^2
剩余产品存储到下一季度的费用K1=4(x-40)
同理T2=50y + 0.2y^2
K2=4(x+y-100)
T3=50(180-x-y) + 0.2(180-x-y )^2
因此总费用F=T1+T2+T3+K1+K2=9000+0.2(x^2+ y^2)+0.2(180-x-y) ^2+4(2x+y-140) (已稍作整理)
令
F'x=0
F'y=0
即
0.4x-0.4(180-x-y)+8=0
0.4y-0.4(180-x-y)+4=0
解得x=50 y=60
易验证该点处
F''xx≥0
F''yy≥0
即为F的极小值点。
在通过和边界值的比较知其是定义域上的最小值点。
即费用总量最低生产方案是:三个季度分别生产50、60、70台。
这本是一个二元函数定义域上求极值的问题,要按线性规划或非线性规划问题做就麻烦了。
至于a,b,c对生产方案的影响:
a增大或减小对生产方案完全没有影响(无论a为多少,方案都是50、60、70)。
b逐渐增大,则三个季度的生产量趋近交付总量的平均值,即同趋于60台(第一季度生产量增加,第二季度不变,第三季度减少)。
c逐渐增大,三季度的生产量分别趋近于每季度的交付量,即分别趋于40、60、80(第一季度生产量减少,第二季度不变,第三季度增加)。
神啊很难打啊啊啊。。。。。。。。 谢谢
设三季度分别生产x , y , 180-x-y台。
且应满足40≤x≤100,100≤x+y≤180,0≤y≤100,x,y∈N+(正整数)
a=50、b=0.2、c=4
则第一季度生产费用T1=50 x + 0.2x^2
剩余产品存储到下一季度的费用K1=4(x-40)
同理T2=50y + 0.2y^2
K2=4(x+y-100)
T3=50(180-x-y) + 0.2(180-x-y )^2
因此总费用F=T1+T2+T3+K1+K2=9000+0.2(x^2+ y^2)+0.2(180-x-y) ^2+4(2x+y-140) (已稍作整理)
令
F'x=0
F'y=0
即
0.4x-0.4(180-x-y)+8=0
0.4y-0.4(180-x-y)+4=0
解得x=50 y=60
易验证该点处
F''xx≥0
F''yy≥0
即为F的极小值点。
在通过和边界值的比较知其是定义域上的最小值点。
即费用总量最低生产方案是:三个季度分别生产50、60、70台。
这本是一个二元函数定义域上求极值的问题,要按线性规划或非线性规划问题做就麻烦了。
至于a,b,c对生产方案的影响:
a增大或减小对生产方案完全没有影响(无论a为多少,方案都是50、60、70)。
b逐渐增大,则三个季度的生产量趋近交付总量的平均值,即同趋于60台(第一季度生产量增加,第二季度不变,第三季度减少)。
c逐渐增大,三季度的生产量分别趋近于每季度的交付量,即分别趋于40、60、80(第一季度生产量减少,第二季度不变,第三季度增加)。
神啊很难打啊啊啊。。。。。。。。 谢谢
追问
????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询