参考
gatt、延迟数目tardiness
Moore启发式算法
# -*- coding:utf-8 -*-
import numpy as np
import time
from .tool import tardiness
class Moore:
def sort(self, data):
data_sort = data[:, np.argsort(data[1])]
return data_sort
def select(self, data_sort):
Copy_data = np.copy(data_sort)
P, Q, Drop_index = [], [], []
for i in range(data_sort.shape[1]):
if np.sum(data_sort[2, :i + 1]) > data_sort[1, i]:
col = np.argsort(data_sort[1, :i + 1])[-1]
Drop_index.append(col)
data_sort[:, col] = 0
P = Copy_data[:, np.array(np.where(data_sort[0, :] != 0)[0])]
Q = Copy_data[:, Drop_index]
return P, Q
def combine(self, P, Q):
try:
data_moore = np.hstack([P, Q])
except ValueError:
data_moore = P
data_moore = data_moore[0]
return data_moore
def moore(data, draw=0):
"""
:param data: 3行,工序编号,交货时间,加工时间
:return:
"""
data = data[:, np.argsort(data[0])]
new = Moore()
start_time = time.time()
data_sort = new.sort(data)
P, Q = new.select(data_sort)
data_moore = new.combine(P, Q)
end_time = time.time()
print("Time used: %s" % (end_time - start_time))
print("The minimum tardiness: %s" % tardiness(data[:, data_moore - 1]))
if draw:
import matplotlib.pyplot as plt
from .tool import gatt
gatt(np.vstack([data_moore, data[:, data_moore - 1][2]]))
plt.show()
return data_moore