46 動態規劃 機器更新問題

2021-09-26 20:56:20 字數 2684 閱讀 6565

import random as rd

from pyscipopt import model, quicksum

def c_generate(n, dc):

c = [0 for i in range(n)]

for i in range(n-1):

c[i+1] = c[i] + int(rd.random() * dc)

return c

def o_generate(n, do):

o = [0 for i in range(n)]

for i in range(n-1):

o[i+1] = o[i] + int(rd.random() * do)

return o

def i_generate(n, i0, dt):

i = [i0 for i in range(n)]

for i in range(n - 1):

i[i + 1] = i[i] - int(rd.random() * dt)

return i

def planing(c,o,i, time_limit):

m = 10000

n = len(c)

do = [o[i] - o[i - 1] if i > 0 else o[i] for i in range(n)]

di = [i[i] - i[i - 1] if i > 0 else i[i] for i in range(n)]

print("\ndo:\n", do)

print("\ndi:\n", di)

model = model("machine_update")

#a[i][j]代表第i年使用的機器役齡超過j年,u[i]==1代表第i年更新機器

a = [[model.addvar(vtype="b", name="a[%s,%s]" % (i, j)) for j in range(n)] for i in range(n)]

u = [model.addvar(vtype="b", name="u[%s]" % (i)) for i in range(n)]

# 以總成本最小為目標

model.setobjective(quicksum((di[j]-do[j])*a[i][j] for i in range(n) for j in range(n)) - quicksum(c[i]*u[i] for i in range(n)), "maximize")

#服役j+1年得先服役j年

for i in range(n):

for j in range(n-1):

model.addcons(a[i][j] - a[i][j+1] >= 0)

#更新時的機器服役0年

for i in range(n):

model.addcons(a[i][0] + u[i] == 1)

#最開始機器是新的

model.addcons(a[0][0] == 0)

#機器要麼換新的,要不年齡長一歲

for i in range(n-1):

model.addcons(quicksum(a[i + 1][j] for j in range(n)) - quicksum(a[i][j] for j in range(n)) - 1 + m * u[i + 1] >= 0)

model.addcons(quicksum(a[i + 1][j] for j in range(n)) - quicksum(a[i][j] for j in range(n)) - 1 - m * u[i + 1] <= 0)

model.addcons(quicksum(a[i + 1][j] for j in range(n)) - m * (1-u[i + 1]) <= 0)

model.addcons(quicksum(a[i + 1][j] for j in range(n)) + m * (1-u[i + 1]) >= 0)

# 設定求解時間

model.setrealparam("limits/time", time_limit)

model.optimize()

print("\ngap:", model.getgap())

# 拿結果

u1 = [round(model.getval(u[i])) for i in range(n)]

a1 = [[round(model.getval(a[i][j])) for j in range(n)] for i in range(n)]

return u1,a1

if __name__ == "__main__":

# 年數

n = 5

# 每個年初更新機器產生的費用(假設最開始時機器是新的)

c = c_generate(n, 4)

print("\nc:\n", c)

# 執行費用

o = o_generate(n, 1547)

print("\no:\n", o)

#機器產生的價值

i = i_generate(n, 20, 5)

print("\ni:\n", i)

#更新策略生成

u,a = planing(c,o,i,100)

print("\nu:\n", u)

print("\na:\n", a)

hcharts更新問題

顯示 hcharts的顯示這裡就不多說了,基本官網上的例子都有 需要說明一點的是,在柱狀圖中表示時,可以使用座標的方式指定表示的橫座標,而不是只能像官網上一樣全部寫完 data可以寫成 1,5 2,8 其中1代表橫座標,5代表縱座標 更新 hcharts更新時series不會自動增加或減少,需要我們...

pip更新問題

更新命令 requirement already up to date 在pycharm的虛擬環境中,特別容易出現執行更新pip的命令後,提示要求己經更新,但實際上檢視版本還是沒更新成功的情況 直接使用pip install upgrade pip 這簡直是死迴圈了,使用python m pip i...

android sdk 無法更新問題

android sdk manager 一直不能更新,網上找了好長時間,現在終於找到了辦法 找原因 先測試一下通不通 ping dl ssl.google.com t 始終ping不通 2.有的使用者可以更新出列表來。如果還是不能,繼續下面的操作。在位址列裡輸入 c windows system32...