簡體   English   中英

循環優化 model

[英]Put in a loop an optimization model

我想將優化 model 放入一個循環中,以便使用持久求解器進行一些重新優化。 我已經編寫了所有代碼來提取數據和 model。 現在我需要將不同的部分放在函數中以便調用它們。

目標是做這樣的事情:

for file in files:
    data = extract_data(file)
    model = construct_model(data)
    model.solve()
    for iter in ...:
        # resolve model
        # save results

基本上我只使用條件語句來提取我的數據,從未使用過 function,所以我所做的就是將所有代碼復制到 function 中:(我有超過 1000 行):

def extract_data():    
    Nurse_DayoffID_D = {}
    UDay_ID = []
    for k,v in ID_Dayoff.items():
        for x,d in enumerate(v):
            Nurse_DayoffID_D[(k,x+10)]=d
            UDay_ID.append(x+10)
            
    [...]
    return

現在,如果我對具體的 model 做同樣的事情:

def model():
    model.N = Set(initialize = N)
    [...]
    def obj_function(model):
         return(
             sum(Penalty_Sigma * model.w[n,d1,d2] + Penalty_Tau * model.r[n,d1,d2] for (d1,d2) in P)
             [...]
         )
    model.ObjFunction = Objective(rule=obj_function, sense=minimize)
    def constraint_1(model, s, d):
        return sum(model.x[n, s, d] for n in model.N) == R[d,s]

    model.C1 = Constraint(model.S, model.D, rule=constraint_1)
    
    [...]
    
    return


for file in files:
        data = extract_data(file)
        model = construct_model(data)
        model.solve()
        for iter in ...:
            # resolve model
            # save results

你認為它沒用了嗎?

  1. 它會起作用的。
  2. 我建議您不要使用iter這個詞,因為它是 Python 內置 function。

對於給定的迭代次數,您可以執行以下操作:

# Run it 3 times
for _ in range(3):
    results = process_model()
    save_results(results)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM