Модуль PuLP: ограничения наложены, но не проверены найденным решением. ⇐ Python
-
Гость
Модуль PuLP: ограничения наложены, но не проверены найденным решением.
Я пытаюсь решить задачу оптимизации. Для решения этой проблемы я использую PuLP. Однако оптимальное решение, данное решателем, не учитывает ограничения, которые я налагаю в коде. Это абсурд и я не понимаю.
def q(e, X, p0): # Constantes et données de l'énonce mois = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12' ] mois0 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11' , '12'] е = {'1': е[0], '2': е[1], '3': е[2], '4': е[3], '5': е[4], '6': е[5], '7': е[6], '8': е[7], '9': е[8], '10': е[9], '11': е[10], '12': е[11]} # Определение проблемы prob = LpProblem("Планирование производства", LpMinimize) # Определение переменных p = LpVariable.dicts("mois", mois0, 0) # Объект функции защита lst_mois(м): Л=[] для i в диапазоне (1, m+1): L.append(str(i)) вернуть Л проб += lpSum([20 * (s0 + lpSum([p - d для i в lst_mois(int(m))])) для m в mois0]) + lpSum([50 * e[ i] * (p - p[str(int(i)-1)]) for i in mois]), "Coût à Constante Près" # Противопоказания для м в месяцах: проб += (s0 + lpSum([p - d для i в lst_mois(int(m))])) >= 0, m потому что я в моем: prob += e * (p - p[str(int(i)-1)]) >= 0, "Contrainte de Signe" +i если X < np.inf: потому что я в моем: проб += p Результат неудовлетворительный, поскольку второе ограничение не соблюдается. Действительно, результат:
[600.0, 466.25, 600.0, 600.0, 282.5, 282.5, 282.5, 282.5, 282.5, 282.5, 0.0, 0.0, 0.0] и оказывается, что второе ограничение никогда не соблюдается.
Как это решить? Спасибо
Я пытаюсь решить задачу оптимизации. Для решения этой проблемы я использую PuLP. Однако оптимальное решение, данное решателем, не учитывает ограничения, которые я налагаю в коде. Это абсурд и я не понимаю.
def q(e, X, p0): # Constantes et données de l'énonce mois = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12' ] mois0 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11' , '12'] е = {'1': е[0], '2': е[1], '3': е[2], '4': е[3], '5': е[4], '6': е[5], '7': е[6], '8': е[7], '9': е[8], '10': е[9], '11': е[10], '12': е[11]} # Определение проблемы prob = LpProblem("Планирование производства", LpMinimize) # Определение переменных p = LpVariable.dicts("mois", mois0, 0) # Объект функции защита lst_mois(м): Л=[] для i в диапазоне (1, m+1): L.append(str(i)) вернуть Л проб += lpSum([20 * (s0 + lpSum([p - d для i в lst_mois(int(m))])) для m в mois0]) + lpSum([50 * e[ i] * (p - p[str(int(i)-1)]) for i in mois]), "Coût à Constante Près" # Противопоказания для м в месяцах: проб += (s0 + lpSum([p - d для i в lst_mois(int(m))])) >= 0, m потому что я в моем: prob += e * (p - p[str(int(i)-1)]) >= 0, "Contrainte de Signe" +i если X < np.inf: потому что я в моем: проб += p Результат неудовлетворительный, поскольку второе ограничение не соблюдается. Действительно, результат:
[600.0, 466.25, 600.0, 600.0, 282.5, 282.5, 282.5, 282.5, 282.5, 282.5, 0.0, 0.0, 0.0] и оказывается, что второе ограничение никогда не соблюдается.
Как это решить? Спасибо
Мобильная версия