43 動態規劃 機器分配問題

2021-09-26 19:55:31 字數 2224 閱讀 8520

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。輸入輸出格式 輸入格式 第一行有兩個...