1

Python でパルプを使用して最大化問題を解決しようとしています。問題は非常に単純です。私には需要があり、生産を最大化したいのです。生産は少なくとも需要と等しくなければならず、問題は生産に必要な時間も考慮する必要があります。

コードは次のとおりです。

# Declaring variables
A1 = pulp.LpVariable("Ciclo_A1", lowBound=0, cat='Integer')
A2 = pulp.LpVariable("Ciclo_A2", lowBound=0, cat='Integer')
A3 = pulp.LpVariable("Ciclo_A3", lowBound=0, cat='Integer')
A4 = pulp.LpVariable("Ciclo_A4", lowBound=0, cat='Integer')
A5 = pulp.LpVariable("Ciclo_A5", lowBound=0, cat='Integer')
P_XB = pulp.LpVariable("Produzione_XB", lowBound=0, cat='Integer')
P_XP = pulp.LpVariable("Produzione_XP", lowBound=0, cat='Integer')
P_XC = pulp.LpVariable("Produzione_XC", lowBound=0, cat='Integer')
Scorte_XB = pulp.LpVariable("Storage_XB", lowBound=0, cat='Integer')
Scorte_XP = pulp.LpVariable("Storage_XP", lowBound=0, cat='Integer')
Scorte_XC = pulp.LpVariable("Storage_XC", lowBound=0, cat='Integer')
Totale_Cicli = pulp.LpVariable("Time_required", lowBound=0, cat='Integer')

# Defining the problem as a maximization problem (Production must be at least equal to the one of the day before)
problem_2 = pulp.LpProblem("Production_Maximization", pulp.LpMaximize)

# Setting up variables
# Defining the demand for each cylinder (same as before)
D_XB, D_XP, D_XC = demand(groupedby_tipo_data_min)

# Defining quantities produced (supply) by each cycle for all cylinders
P_XB, P_XP, P_XC = supply(Cicli)

# Defining total time taken by each cycle to produce the danded quantity of cylinders, time is in minutes   
Totale_Cicli = time_required(Cicli)

# Defining storage 
Scorte_XB, Scorte_XP, Scorte_XC = storage(P_XB, P_XP, P_XC, D_XB, D_XP, D_XC)

# The Objective function
problem_2 += P_XB + P_XP + P_XC # I want to maximize production but I don't want to produce more than the requested quantity

# Constraints: Time constraint present
problem_2 += P_XB >= D_XB # my production must be at least equal to the demand
problem_2 += P_XP >= D_XP
problem_2 += P_XC >= D_XC
problem_2 += Totale_Cicli <= Tempo_disponibile
problem_2 += A1 >= 0
problem_2 += A2 >= 0
problem_2 += A3 >= 0
problem_2 += A4 >= 0
problem_2 += A5 >= 0

# Solving the problem
status = problem_2.solve()   # Solver

時間制約で問題を解決すると、サイクルの奇妙な数値 (-38.378) が得られ、問題のステータスは実行不可能になります。このため、時間の制約なしで問題を解いてみました。結果として得られるのはサイクルの0であり、問​​題は無制限です。

目的関数を上書きしていた生産上の制約を取り除くことで、これを解決しました。

現在、2日間の生産の最大化に関して同様の問題があります。特に、生産量は少なくとも初日の需要と等しくなければならず、2 日目の需要を超えてはなりません。

問題の定義は上記と同じです。制約は次のとおりです。

# Constraints: Time constraint present 
problem_4 += P_XB >= D0_XB # supply must be at least equal to the demand of the day before, but as close as possible to the total demand
problem_4 += P_XP >= D0_XP
problem_4 += P_XC >= D0_XC
problem_4 += Totale_Cicli <= Tempo_disponibile
problem_4 += A1 >= 0
problem_4 += A2 >= 0
problem_4 += A3 >= 0
problem_4 += A4 >= 0
problem_4 += A5 >= 0

問題は、常に 2 日目の生産量を超えることです。他の制約を入れてみましたが、問題は実現不可能になります。P_XB、P_XP、および P_XC の上限を設定できますか?

ありがとう、カルロッタ。

4

1 に答える 1