Модуль PuLP: ограничения наложены, но не проверены найденным решением.Python

Программы на Python
Ответить
Гость
 Модуль PuLP: ограничения наложены, но не проверены найденным решением.

Сообщение Гость »


Я пытаюсь решить задачу оптимизации. Для решения этой проблемы я использую PuLP. Однако оптимальное решение, данное решателем, не учитывает ограничения, которые я налагаю в коде. Это абсурд и я не понимаю.

Описание проблемы: Я хочу решить проблему, изображенную на картинке
Проблема оптимизации, которую я хочу решить

Изображение


"sc" означает "в условиях ограничений" и: f(p, e) = 20 sum_{i=0}^12 s_i + 50 \sum_{i=0}^{11}e {p[i+1]-p} с s_m = s_0 + sum_{i=1}^m (p_m - d_m)

Последовательность u просто проверяет u=sign(p[i+1]-p)

d — заданная последовательность элементов.

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[i] - p[str(int(i)-1)]) >= 0, "Contrainte de Signe" +i если X < np.inf: потому что я в моем: проб += p[i] Результат неудовлетворительный, поскольку второе ограничение не соблюдается. Действительно, результат:

[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] и оказывается, что второе ограничение никогда не соблюдается.

Как это решить? Спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»