Johnson启发式算法

参考

gatt、makespan

Johnson启发式算法

# -*- coding:utf-8 -*-
import numpy as np


class Johnson:
	def group(self, data):
		P = data[:, np.where(data[1] < data[2])[0]]
		Q = data[:, np.where(data[1] >= data[2])[0]]
		return P, Q
	
	def sort(self, P, Q):
		P = P[:, np.argsort(P[1])]
		Q = Q[:, np.argsort(-Q[2])]
		return P, Q
	
	def combine(self, P, Q):
		try:
			data = np.hstack([P, Q])
		except ValueError:
			data = P
		data_johnson = data[0]
		return data_johnson


def johnson(data, draw=0):
	"""
	:param data:3行,工序编号,机器1加工时间,机器2加工时间
	:return:
	"""
	data = data[:, np.argsort(data[0])]
	new = Johnson()
	P, Q = new.group(data)
	P, Q = new.sort(P, Q)
	data_johnson = new.combine(P, Q)
	if draw:
		import matplotlib.pyplot as plt
		from .tool import gatt
		gatt(data[:, data_johnson - 1])
		plt.show()
	return data_johnson

猜你喜欢

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