def FlowShop(n,a,b): job = []#记录n个工件Jobtype x= [0 for i in range(n)]#记录最优加工顺序 for i in range(n): if a[i]>b[i]: key = b[i] else: key = a[i] N1 = a[i]<b[i] job.append(Jobtype(key,i,N1)) job.sort() j=0 k=n-1 for i in range(n): if job[i].N1: x[j]=job[i].id#将N1中的工件放置在数组c的前端 j += 1 else: x[k]=job[i].id# 将N2中的工件放置在数组c的后端 k -= 1 j = a[x[0]] k = j + b[x[0]] for i in range(1,n):#计算总时间 j += a[x[i]] if(j < k): k = b[x[i]] + k else: k = j + b[x[i]] return x,k if __name__ == "__main__": a = [3,8,10,12,6,9,15] b = [7,2,6,18,3,10,4] n = len(a) x,k = FlowShop(n,a,b) print("最优加工次序为:") for i in range(n): print(x[i] + 1,end = ' ')
时间: 2024-02-14 11:07:15 浏览: 18
这段代码实现了一个流水车间调度问题的解决方案。其中,n表示工件数量,a和b分别表示每个工件在不同机器上的加工时间。FlowShop函数首先通过比较a和b的大小来确定每个工件的类型(N1或N2),然后对工件按照key值进行排序。接着,按照N1类型的工件放在数组x的前端,按照N2类型的工件放在数组x的后端。最后,通过计算每个工件在不同机器上的加工时间,得到整个流水车间的最优加工次序和总时间。
需要注意的是,这段代码中的实现并不是完整的,缺少了Jobtype类的定义,而且也没有对代码进行注释说明。同时,这段代码只是实现了一种简单的贪心算法,不能保证得到全局最优解。
相关问题
那可以修改这个代码使其完整吗
当然可以,下面是对代码进行完整修改并加上注释说明:
```python
# 定义工件类型的类
class Jobtype:
def __init__(self, key, id, N1):
self.key = key # 工件类型的关键字
self.id = id # 工件的编号
self.N1 = N1 # 工件类型是否为N1
# 实现流水车间调度问题的贪心算法
def FlowShop(n, a, b):
job = [] # 记录n个工件的Jobtype
x = [0 for i in range(n)] # 记录最优加工顺序
for i in range(n):
if a[i] > b[i]:
key = b[i]
else:
key = a[i]
N1 = a[i] < b[i]
job.append(Jobtype(key, i, N1))
job.sort(key=lambda j: j.key) # 对工件按照key值进行排序
j = 0
k = n - 1
for i in range(n):
if job[i].N1:
x[j] = job[i].id # 将N1中的工件放置在数组x的前端
j += 1
else:
x[k] = job[i].id # 将N2中的工件放置在数组x的后端
k -= 1
j = a[x[0]]
k = j + b[x[0]]
for i in range(1, n): # 计算总时间
j += a[x[i]]
if j < k:
k = b[x[i]] + k
else:
k = j + b[x[i]]
return x, k
if __name__ == "__main__":
a = [3, 8, 10, 12, 6, 9, 15]
b = [7, 2, 6, 18, 3, 10, 4]
n = len(a)
x, k = FlowShop(n, a, b)
print("最优加工次序为:")
for i in range(n):
print(x[i] + 1, end=' ')
print("\n总时间为:", k)
```
修改后的代码包括了Jobtype类的定义和注释说明,增强了代码可读性和可维护性。同时,在计算总时间时,可以使用lambda表达式对工件按照key值进行排序,简化了代码。
function [makespan, start_time,processing_time] = schedule(job_seq, job_num, machine_num) processing_time = rand(job_num, machine_num); % 生成随机处理时间 start_time = zeros(job_num, machine_num); % 记录每道工序的开始时间 end_time = zeros(job_num, machine_num); % 记录每道工序的结束时间 for j = 1:machine_num if j == 1 start_time(1, j) = 0; else start_time(1, j) = end_time(1, j-1); end end_time(1, j) = start_time(1, j) + processing_time(job_seq(1), j); end for i = 2:job_num for j = 1:machine_num if j == 1 start_time(i, j) = end_time(i-1, j); else start_time(i, j) = max(end_time(i, j-1), end_time(i-1, j)); end end_time(i, j) = start_time(i, j) + processing_time(job_seq(i), j); end end makespan = max(end_time(:, end)); end改成流水车间调度函数
function [makespan, start_time, processing_time] = flowshop_scheduling(job_seq, job_num, machine_num)
% 计算每个工序的处理时间
processing_time = rand(job_num, machine_num);
% 初始化开始时间和结束时间矩阵
start_time = zeros(job_num, machine_num);
end_time = zeros(job_num, machine_num);
% 计算开始时间和结束时间
for j = 1:machine_num
if j == 1
start_time(1, j) = 0;
else
start_time(1, j) = end_time(1, j-1);
end
end_time(1, j) = start_time(1, j) + processing_time(job_seq(1), j);
end
for i = 2:job_num
for j = 1:machine_num
if j == 1
start_time(i, j) = end_time(i-1, j);
else
start_time(i, j) = max(end_time(i, j-1), end_time(i-1, j));
end
end_time(i, j) = start_time(i, j) + processing_time(job_seq(i), j);
end
end
% 计算完成时间
makespan = max(end_time(:, end));
end
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)