用matlab求此数学建模问题
请教高人一道数学建模题,谢谢。机器编号1234567维修时间(小时)58784913停工损失(万元/小时)0.61.81.20.80.81.71.0问题:1.维修工人只有...
请教高人一道数学建模题,谢谢。
机器编号 1 2 3 4 5 6 7
维修时间(小时) 5 8 7 8 4 9 13
停工损失(万元/小时) 0.6 1.8 1.2 0.8 0.8 1.7 1.0
问题:1.维修工人只有一人,求总损失最小的维修次序。
2.维修工人有两人,每台机器只能一人修,求总损失最小的维修次序。
3.维修工人有一人,有n台机器需要维修,每台的停工损失已知,维修时间已知,求总损失最小的模型。
求高人把代码发到我邮箱,谢谢!
italy1973@qq.com 展开
机器编号 1 2 3 4 5 6 7
维修时间(小时) 5 8 7 8 4 9 13
停工损失(万元/小时) 0.6 1.8 1.2 0.8 0.8 1.7 1.0
问题:1.维修工人只有一人,求总损失最小的维修次序。
2.维修工人有两人,每台机器只能一人修,求总损失最小的维修次序。
3.维修工人有一人,有n台机器需要维修,每台的停工损失已知,维修时间已知,求总损失最小的模型。
求高人把代码发到我邮箱,谢谢!
italy1973@qq.com 展开
3个回答
展开全部
n=[ 1 2 3 4 5 6 7];
T=[ 5 8 7 8 4 9 13];
M=[ 0.6 1.8 1.2 0.8 0.8 1.7 1.0]; %输入对应矩阵
P=perms(n); %求出修理顺序的全排列
[h,w]=size(P); %h是有多少行,就是多少种排列,w是宽度也就是列数为7
total=10000; %设定一个很大的数用于后面的比较找最小损失
optimal=0; %最小损失对应哪种排列,未知赋值为0
for i=1:h %将所有的情况进行对比,循环h次
D=T(P(i,:)); %按修理顺序排列维修时间
Me=M(P(i,:)); %按修理顺序排列维修损失
s=0;
for k=1:7 %按修理顺序计算每台机器的停工时间
delay(k)=D(k)+s;
s=delay(k); %后面时间是前面的累积
end
Tot=Me*delay'; %行向量与列向量相乘,就是单位时间损失乘以时间在求和
if total>Tot %比较这种情况下损失是否比已知最小的还小
optimal=i; %是的话,记录这种情况
total=Tot; %记录这种损失
end %在有些数据下可能有多种情况,这里没有写出判断相等的处理
end
optimal %穷举之后,得到最小的序列编号
sequence=P(optimal,:) %序列
total %损失
M./T %这里是推断第三题的结果,单位时间损失除以时间得到的顺序大到小即是最优顺序
下面是输出结果
optimal =
3732
sequence =
2 5 6 3 1 4 7
total =
199.9000
ans =
0.1200 0.2250 0.1714 0.1000 0.2000 0.1889 0.0769
下面是两人情况,与上面类似
n=[ 1 2 3 4 5 6 7];
T=[ 5 8 7 8 4 9 13];
M=[ 0.6 1.8 1.2 0.8 0.8 1.7 1.0];
P=perms(n);
[h,w]=size(P);
total=10000;
optimal=0;
for i=1:h
D=T(P(i,:));
Me=M(P(i,:));
s=0;
for k=1:4 %这里处理的时候认为工人一按顺序处理前四个
delay(k)=s+D(k);
s=delay(k);
end
s=0;
for k=5:7 %工人二处理后三个,这里顺序有重复,即工人一和工人二是等价的,可以调换的,一种其实是两种
delay(k)=s+D(k);
s=delay(k);
end
Tot=Me*delay';
if total>Tot
optimal=i;
total=Tot;
end
end
optimal
sequence=P(optimal,:)
total
下面是结果
optimal =
1539
sequence =
5 6 1 4 2 3 7
total =
117.3000
第三问从matlab的实验情况看就是单位时间的停工损失,除以维修时间,得到的结果从大到小排列,对应编号就是维修顺序。具体要说明应该是数学证明,不是程序的问题,刚调了程序有些头昏,你自己看看有没有什么证明,或者改天我搞清了再加上
目前有思路但没有具体证明,如两个机器,对应时间和单位时间损失为T1、T2,M1、M2两种方法损失为M1T1+M2*(T1+T2)和M2T2+M1(T1+T2),相差部分为M2T1和M1T2,M1/T1>M2/T2则有M1T2>M2T1,所以要先修理1号,归纳法如何归纳,还是用别的方法就不知道了。
T=[ 5 8 7 8 4 9 13];
M=[ 0.6 1.8 1.2 0.8 0.8 1.7 1.0]; %输入对应矩阵
P=perms(n); %求出修理顺序的全排列
[h,w]=size(P); %h是有多少行,就是多少种排列,w是宽度也就是列数为7
total=10000; %设定一个很大的数用于后面的比较找最小损失
optimal=0; %最小损失对应哪种排列,未知赋值为0
for i=1:h %将所有的情况进行对比,循环h次
D=T(P(i,:)); %按修理顺序排列维修时间
Me=M(P(i,:)); %按修理顺序排列维修损失
s=0;
for k=1:7 %按修理顺序计算每台机器的停工时间
delay(k)=D(k)+s;
s=delay(k); %后面时间是前面的累积
end
Tot=Me*delay'; %行向量与列向量相乘,就是单位时间损失乘以时间在求和
if total>Tot %比较这种情况下损失是否比已知最小的还小
optimal=i; %是的话,记录这种情况
total=Tot; %记录这种损失
end %在有些数据下可能有多种情况,这里没有写出判断相等的处理
end
optimal %穷举之后,得到最小的序列编号
sequence=P(optimal,:) %序列
total %损失
M./T %这里是推断第三题的结果,单位时间损失除以时间得到的顺序大到小即是最优顺序
下面是输出结果
optimal =
3732
sequence =
2 5 6 3 1 4 7
total =
199.9000
ans =
0.1200 0.2250 0.1714 0.1000 0.2000 0.1889 0.0769
下面是两人情况,与上面类似
n=[ 1 2 3 4 5 6 7];
T=[ 5 8 7 8 4 9 13];
M=[ 0.6 1.8 1.2 0.8 0.8 1.7 1.0];
P=perms(n);
[h,w]=size(P);
total=10000;
optimal=0;
for i=1:h
D=T(P(i,:));
Me=M(P(i,:));
s=0;
for k=1:4 %这里处理的时候认为工人一按顺序处理前四个
delay(k)=s+D(k);
s=delay(k);
end
s=0;
for k=5:7 %工人二处理后三个,这里顺序有重复,即工人一和工人二是等价的,可以调换的,一种其实是两种
delay(k)=s+D(k);
s=delay(k);
end
Tot=Me*delay';
if total>Tot
optimal=i;
total=Tot;
end
end
optimal
sequence=P(optimal,:)
total
下面是结果
optimal =
1539
sequence =
5 6 1 4 2 3 7
total =
117.3000
第三问从matlab的实验情况看就是单位时间的停工损失,除以维修时间,得到的结果从大到小排列,对应编号就是维修顺序。具体要说明应该是数学证明,不是程序的问题,刚调了程序有些头昏,你自己看看有没有什么证明,或者改天我搞清了再加上
目前有思路但没有具体证明,如两个机器,对应时间和单位时间损失为T1、T2,M1、M2两种方法损失为M1T1+M2*(T1+T2)和M2T2+M1(T1+T2),相差部分为M2T1和M1T2,M1/T1>M2/T2则有M1T2>M2T1,所以要先修理1号,归纳法如何归纳,还是用别的方法就不知道了。
Sievers分析仪
2024-10-13 广告
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询