import random as rd
from pyscipopt import model, quicksum
def sub_ll_print(l, digit):
s = "["
for i in range(len(l)):
s = s + str(l[i])
temp = l[i]
digit_temp = 1
while temp//10>0:
digit_temp += 1
temp = temp//10
for j in range(digit-digit_temp):
s += " "
if i < len(l)-1:
s += ", "
s += "]"
return s
def ll_print(name, ll):
ll1 = [[int(ll[i][j]) for j in range(len(ll[i]))] for i in range(len(ll))]
num_max = max([max(ll1[i]) for i in range(len(ll1))])
digit = 1
while num_max//10>0:
digit += 1
num_max = num_max // 10
print("\n"+name+":")
print("["+sub_ll_print(ll[0], digit)+",")
for i in range(1,len(ll)-1):
print(" "+sub_ll_print(ll[i], digit)+",")
print(" " + sub_ll_print(ll[-1], digit) + "]")
def ip(m, n, l, r, g, time_limit):
model = model("machine_allocation_ip")
a = [[model.addvar(vtype="i", name="a[%s,%s]" % (i, j)) for j in range(n)] for i in range(m)]
# 以總成本最小為目標
model.setobjective(quicksum(g[j]*a[i][j] for i in range(m) for j in range(n)), "maximize")
# 機器數量約束
for i in range(m):
if i == 0:
model.addcons(quicksum(a[i][j] for j in range(n)) == l)
else:
model.addcons(quicksum(r[j] * a[i-1][j] for j in range(n)) - quicksum(a[i][j] for j in range(n)) >= 0)
model.addcons(quicksum(r[j] * a[i-1][j] for j in range(n)) - quicksum(a[i][j] for j in range(n)) <= 0.9999)
# 設定求解時間
model.setrealparam("limits/time", time_limit)
model.optimize()
print("\ngap:",model.getgap())
# 拿結果
a1 = [[round(model.getval(a[i][j])) for j in range(n)] for i in range(m)]
return a1
if __name__ == "__main__":
#週期數、生產線數、機器數
m,n,l = 5,3,1000
#完好率、產量
r = [int(rd.random()*10)/10 for i in range(n)]
g = [int(rd.random()*10) for i in range(n)]
# r = [0.7, 0.9]
# g = [8, 5]
print("\nr:\n", r)
print("\ng:\n", g)
# 求解,得到每個工廠分配的機器數
a_ip = ip(m, n, l, r, g, 100)
ll_print("a_ip", a_ip)
動態規劃 機器分配
問題描述 機器分配 hnoi 95 一 問題描述 總公司擁有高效生產裝置 m 臺,準備分給下屬的 n 個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這 m 臺裝置才能使國家得到的盈利最大?求出 最大盈利值。其中 m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但...
動態規劃 機器分配
時間限制 1 sec 記憶體限制 64 mb 提交 7 解決 4 提交 狀態 討論版 命題人 題目描述 魔法學院購進高效生產裝置m台以轉換魔法石能量,準備分給學院的n個小組。各小組若獲得這些裝置,可以為學院提供一定的魔法石能量。問 如何分配這m臺裝置才能使魔法石能量最大?求出最大魔法石能量值。其中m...
動態規劃基礎題 機器分配
題目描述 總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。輸入輸出格式 輸入格式 第一行有兩個...