#python #mathematical-optimization #linear-programming #pulp
#python #математическая оптимизация #линейное программирование #pulp
Вопрос:
я пытаюсь найти оптимальное решение проблемы, используя модуль Pulp в Python. Моя проблема на фото. Я написал эту проблему в Pulp, но я понимаю, что эта проблема неосуществима (статус -1). Я знаю, что у этой проблемы есть решение, но я должен допустить какую-то ошибку в коде (когда я изменяю, что переменные являются непрерывными, проблема имеет непрерывное решение). Спасибо за вашу помощь.
import numpy as np
# Import PuLP modeler functions
from pulp import *
# Creates the 'prob' variable to contain the problem data
prob = LpProblem("Computer company service problem", LpMinimize )
demand = {1: 6000, 2: 7000, 3: 8000, 4: 9500, 5: 11500}
# A dictionary called 'Vars' is created to contain the referenced variables(the routes)
vars_x = LpVariable.dicts("x", range(1,6), 0, None, LpInteger)
vars_y = LpVariable.dicts("y", range(1,6), 0, None, LpInteger)
# The objective function is added to 'prob' first
prob = lpSum([15000*vars_y[i] 7500*vars_x[i] for i in range(1,6)]), "Sum_of_employee_cost"
# The demand minimum constraints are added to prob for each demand
for i in range(1,6):
prob = 160*vars_y[i]-50*vars_x[i]>=demand[i], f"Reach demand in month {i}"
# The demand minimum constraints are added to prob for each demand node (bar)
prob = vars_y[1]==50, f"Workers in month {1}"
for i in range(2,6):
prob = 0.95*vars_y[i-1] vars_x[i-1]==vars_y[i], f"Workers in month {i}"
prob.solve()
Комментарии:
1. Я думаю, что вашим последним ограничением должно быть a
>=
, хотя я признаю, что не прочитал текст полностью. По крайней мере, вы получаете решение таким образом.2. Как предположил @pchtsp, вам нужно изменить последнее ограничение. У вас есть целочисленные переменные
vars_y
иvars_x
для представления количества техников и стажеров. Однако последнее ограничение приведет к нецелым значениям в правой части. Предложил бы вам переписать какvars_y[i] <= 0.95*vars_y[i-1] vars_x[i-1]
. Это обеспечит, по крайней мере, достаточное количество проходящих стажеров (в среднем теряется 5%, но это может занять несколько месяцев, и некоторые стажеры могут не стать полноценными техниками).