moore启发式算法

参考

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

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/86603034