在整数规划时遇到 max{a, b, c} 或是 min{d, e, f} 这样的约束时, 我们把它转换为代码的形式, 这样就能方便建模了
def max_to_code(change_list=[]):
def get_max(a, b):
dvalue = "np.abs(%s - %s)" % (a, b)
return "0.5 * (%s + %s - %s) + %s" % (a, b, dvalue, dvalue)
for i in range(len(change_list) - 1):
change_list[i + 1] = get_max(change_list[i], change_list[i + 1])
return change_list[-1]
def min_to_code(change_list=[]):
def get_min(a, b):
dvalue = "np.abs(%s - %s)" % (a, b)
return "0.5 * (%s + %s - %s)" % (a, b, dvalue)
for i in range(len(change_list) - 1):
change_list[i + 1] = get_min(change_list[i], change_list[i + 1])
return change_list[-1]
print(max_to_code([1, 4]))
# 0.5 * (1 + 4 - np.abs(1 - 4)) + np.abs(1 - 4)
print(min_to_code([1, 5, 6]))
# 0.5 * (0.5 * (1 + 5 - np.abs(1 - 5)) + 6 - np.abs(0.5 * (1 + 5 - np.abs(1 - 5)) - 6))