动态规划——装配线调度问题
2013-03-03 23:24
176 查看
这个问题是在算法导论的动态规划章节有提到,由于问题叙述起来太繁杂就直接省略。
命名规则与书上的伪代码是一致的,只是用C++具体语言实现了而已。
命名规则与书上的伪代码是一致的,只是用C++具体语言实现了而已。
//动态规划问题——装配线调度问题 #pragma once class ASL { private: int stationNum; //装配站个数,从文件中读取 int *arr1; //装配线1 int *arr2; //装配线2 这两个装配线拥有相同的装配站个数 int *L1; int *L2; int *f1; int *f2; int *t1; int *t2; int e1,e2; int x1,x2; int LL; int FF; public: ASL(); ~ASL(); void ProRun(); void PrintResult(); };
#include "ALSPro.h" #include <fstream> #include <iostream> using namespace std; ASL::ASL() { ifstream in("ASL.txt"); //文件读取 in>>stationNum; in>>e1>>e2; in>>x1>>x2; arr1 = new int[stationNum]; if (arr1 == NULL) { exit(1); } for (int idx = 0; idx < stationNum; idx++) { in>>arr1[idx]; } arr2 = new int[stationNum]; if (arr2 == NULL) { exit(1); } for (int idx = 0; idx < stationNum; idx++) { in>>arr2[idx]; } t1 = new int[stationNum-1]; if (t1 == NULL) { exit(1); } for (int idx = 0; idx < stationNum-1; idx++) { in>>t1[idx]; } t2 = new int[stationNum-1]; if (t2 == NULL) { exit(1); } for (int idx = 0; idx < stationNum-1; idx++) { in>>t2[idx]; } in.close(); //关闭文件 L1 = new int[stationNum]; if (L1 == NULL) { exit(1); } L2 = new int[stationNum]; if (L2 == NULL) { exit(1); } f1 = new int[stationNum]; if (f1 == NULL) { exit(1); } f2 = new int[stationNum]; if (f2 == NULL) { exit(1); } } ASL::~ASL() { delete arr1; delete arr2; delete L1; delete L2; delete f1; delete f2; delete t1; delete t2; } void ASL::ProRun() { f1[0] = arr1[0] + e1; f2[0] = arr2[0] + e2; for (int idx = 1; idx < stationNum; idx++) { if ((f1[idx-1] + arr1[idx]) <= (f2[idx-1] + t2[idx-1] + arr1[idx])) { f1[idx] = f1[idx-1] + arr1[idx]; L1[idx] = 1; } else { f1[idx] = f2[idx-1] + t2[idx-1] + arr1[idx]; L1[idx] = 2; } if ((f2[idx-1] + arr2[idx]) <= (f1[idx-1] + t1[idx-1] + arr2[idx])) { f2[idx] = f2[idx-1] + arr2[idx]; L2[idx] = 2; } else { f2[idx] = f1[idx-1] + t1[idx-1] + arr2[idx]; L2[idx] = 1; } } if ((f1[stationNum-1] + x1) <= (f2[stationNum-1] + x2)) { FF = f1[stationNum-1] + x1; LL = 1; } else { FF = f2[stationNum-1] + x2; LL = 2; } } void ASL::PrintResult() { ASL::ProRun(); int idx = LL; cout<<"line "<<idx<<", station "<<stationNum<<endl; for (int j = stationNum-1; j > 0; j--) { if (idx == 1) { idx = L1[j]; } else { idx = L2[j]; } cout<<"line "<<idx<<", station "<<j<<endl; } }
#include <iostream> #include "ALSPro.h" using namespace std; void main() { ASL as; as.PrintResult(); }
相关文章推荐
- 动态规划--装配线调度问题
- 流水线调度最优问题(装配线调度问题)动态规划 O(n)时间(线性时间)C++实现
- 动态规划--装配线调度问题
- 流水线调度最优问题(装配线调度问题)动态规划 O(n)时间(线性时间)C++实现
- 装配线调度问题 算法导论动态规划P194
- 动态规划--装配线调度问题
- 动态规划之装配线调度问题
- 动态规划: 装配线调度问题 (算法导…
- 动态规划 - 装配线调度问题
- 动态规划之 装配线调度问题
- 动态规划 - 装配线调度问题
- 动态规划之装配线调度理解
- 动态规划解机器调度问题——算法解题报告
- 动态规划-装配线调度
- 动态规划之装配线调度
- 动态规划之 最优流水调度问题
- 动态规划-装配线调度
- 动态规划——装配线调度
- 动态规划-装配线调度
- 动态规划1——生产线调度问题(Dynamic Programming)