Как узнать, невозможна ли проблема оптимизации или нет? Pyomo Предупреждение: проблема может быть невозможной - PullRequest
1 голос
/ 18 июня 2019

Pyomo может найти решение, но выдает следующее предупреждение: ПРЕДУПРЕЖДЕНИЕ. Загрузка объекта SolverResults со статусом предупреждения в Модель = (SecondCD); сообщение от solver = Ipopt 3.11.1 \ x3a Сходится к локально недостижимой точке. Проблема может быть невозможной.

Как узнать, является ли проблема неосуществимой или нет?

эта модель pyomo оптимизирует решение фермы о распределении ресурсов.

model.Crops = Set() # set Crops := cereal rapes maize ;
model.Inputs = Set() # set Inputs := land labor capital fertilizer;
model.b = Param(model.Inputs) # Parameters in CD production function
model.x = Var(model.Crops, model.Inputs, initialize = 100, within=NonNegativeReals)
def production_function(model, i): 
        return prod(model.x[i,j]**model.b[j] for j in model.Inputs)
model.Q = Expression(model.Crops, rule=production_function)

...

instance = model.create_instance(data="SecondCD.dat")
opt = SolverFactory("ipopt")
opt.options["tol"] = 1E-64
results = opt.solve(instance, tee=True) # solves and updates instance 
instance.display()

если я установлю b> = 1 (например, параметр b: = земля 1 труд 1 капитал 1 удобрение 1), pyomo может найти оптимальное решение;

но если я установлю b <1, (например: параметр b: = земля 0,1, труд 0,1, капитал 0,1 удобрения 0,1), и установлю opt.options ["tol"] = 1E-64, pyomo может найти решение, но дает это предупреждение. </p>

Я ожидаю оптимального решения, но фактический результат дает предупреждение, упомянутое выше.

1 Ответ

0 голосов
/ 18 июня 2019

Сообщение, которое вы получаете (message from solver=Ipopt 3.11.1\x3a Converged to a locally infeasible point. Problem may be infeasible.), не означает, что проблема обязательно является практически неосуществимой.Нелинейный решатель обычно дает вам локальный оптимум, и путь к решению является очень важной частью нахождения «лучшего» локального оптимума.Когда вы попробовали с другой точки зрения, вы нашли выполнимое решение, и это доказательство того, что ваша проблема выполнима.

Теперь, при поиске глобального оптимума вместо локального оптимума, это немного сложнее.Один из способов выяснить это - проверить, не является ли ваша проблема выпуклой.Если это так, это означает, что будет только один локальный оптимум, и что этот локальный оптимум является глобальным оптимумом.Это можно сделать математически.См. https://math.stackexchange.com/a/1707213/470821 и http://www.princeton.edu/~amirali/Public/Teaching/ORF523/S16/ORF523_S16_Lec7_gh.pdf из быстрого поиска Google).Если вы обнаружили, что ваша проблема не является выпуклой, то вы можете попытаться доказать, что локальных оптимумов мало, и что их можно легко найти с хорошими отправными точками.Наконец, если это невозможно, вы должны рассмотреть более продвинутые методы, все с их плюсами и минусами.Например, вы можете попытаться сгенерировать набор исходных решений, чтобы убедиться, что вы охватили всю возможную область вашей проблемы.Еще один способ - использовать методы метаэвристики, чтобы помочь вам найти лучшее начальное решение.

Кроме того, я уверен, что у Ipopt есть некоторые инструменты, помогающие решить эту проблему, - найти хорошее начальное решение, улучшающее результат.местный оптимум.

...