一、问题
-
生产一个产品有9道工序,每个工序必须在前一步完成后才有原材料输入。每道工序耗时不一。
-
9道工序顺序及耗时如下
序号 工序 时间 1 打印 7 2 退火 1 3 线切割 0.5 4 机加 3 5 打磨 6 6 喷砂 3 7 固溶 7 8 磨粒流 7 9 检测 9 可以看出生产一个产品时间是43.5天。
现有客户给180时间,分析算出马力全开可以生产多少件成品。
二、分析
-
输入为工序耗时数组,及天数,输出为产品数!
-
寻找算法
建立excel每格半天计算画出图形,直观分析,图中九行对应9道工序,每一列代表半天
- 可以看出时间是卡顿在最耗时的工序哪里,不难发现生产N次的时间:N次时间=一次完整时间+(N-1)*最耗时工序时间。
-
建立模型
算法核心公式:N次时间=一次完整时间+(N-1)*最耗时工序时间
步骤:① 将工序时间转换成数组②找到单次加工耗时③寻找最耗时环节④按照公式求解
按照公式,开始编码
三、代码实现
-
求N件产品的时间函数
输入参数:
eTs为工序时间数组,比如本例输入为{ 7.0, 1.0, 0.5, 3, 6, 3, 7, 7, 9 };
Cnt为生产产品数;
返回值:
返回值为生产Cnt件需要的时间;
static double GetDays(double[] eTs,int Cnt) { if (Cnt <= 0) { return 0; } double maxT = eTs.Max(); double oneProductT = eTs.Sum(); return oneProductT + maxT * (Cnt - 1); }
-
主函数调用代码
main函数中调用如下!
double[] ereryTimes = { 7.0, 1.0, 0.5, 3, 6, 3, 7, 7, 9 }; double maxT = ereryTimes.Max(); string instrDays = ""; Console.WriteLine("请输入你拥有的天数:"); while (string.Empty != (instrDays = Console.ReadLine())) { double yourDays = 0; if (double.TryParse(instrDays, out yourDays)) { Console.WriteLine("你拥有" + yourDays + "天生产时间!"); } for (int i = 0; i < yourDays; i++) { double tmp = GetDays(ereryTimes, i); if (yourDays< tmp) { Console.WriteLine("你能生产"+(i-1)+"件产品!"); break; } } Console.WriteLine("请继续输入你拥有的天数:"); } Console.ReadLine();
四、完成
至此完成排产任务,编写简单小工具,带上framework发给同事使用。