用代碼轉換整數規劃 max{ } 與 min{ } 形式至代碼形式

在整數規劃時遇到 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))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章