Использование ленивых ограничений в оптимизации Python с помощью обратных вызовов: пример кода

Вот пример фрагмента кода, демонстрирующий, как использовать ленивые ограничения в Python с помощью популярной библиотеки оптимизации PuLP:

from pulp import *
# Create a new LP problem
problem = LpProblem("Lazy Constraint Example", LpMinimize)
# Create decision variables
x1 = LpVariable("x1", lowBound=0)
x2 = LpVariable("x2", lowBound=0)
# Add objective function
problem += 3 * x1 + 4 * x2
# Add initial constraints
problem += x1 + x2 >= 5
problem += 2 * x1 + 3 * x2 >= 8
# Define a callback function
def lazy_constraint_callback():
    if value(x1) + value(x2) < 7:
        problem += x1 + x2 >= 7
# Add the lazy constraint callback
problem.addCallback(lazy_constraint_callback)
# Solve the problem
problem.solve()
# Print the solution
print("Solution:")
print("x1 =", value(x1))
print("x2 =", value(x2))
print("Objective =", value(problem.objective))

В этом примере исходными ограничениями являются x1 + x2 >= 5и 2 * x1 + 3 * x2 >= 8. Функция обратного вызова lazy_constraint_callbackвызывается в процессе оптимизации. Если текущее решение нарушает условие x1 + x2 <7, к проблеме динамически добавляется новое ограничение x1 + x2 >= 7.