Как автоматически преобразовать объективное выражение из модели Pyomo для использования в качестве fitness_func для pygaPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как автоматически преобразовать объективное выражение из модели Pyomo для использования в качестве fitness_func для pyga

Сообщение Anonymous »

Я использую Pyomo для сформулирования задач оптимизации и решателей, как, например, iPopt. Теперь я хотел бы применить метахевристические решатели к этим проблемам оптимизации. Я уже слышал о таких каркасах, как Pymoo или Pygad, которые можно использовать для таких целей. Я хотел бы найти автоматический способ извлечь целевые или ограниченные формулировки из экземпляра Pyomo ConcreteModel и использовать его для сформулирования Fitness_func для pygad.
Для моего MWE я просто создаю простую модель с простой объективом (и стараюсь передать эту цель в качестве FITNESS_FUNC, чтобы PYGAD GA). /> Минимальный (не так желательно) Рабочий пример: < /strong> < /p>

Код: Выделить всё

from pyomo import  environ as pe
import pygad

model = pe.ConcreteModel()
model.set1 = pe.Set(
initialize=[i for i in range(10)]
)
model.param1 = pe.Param(
model.set1,
initialize={
i: (i+1)**2 for i in model.set1
},
mutable=True
)
model.var = pe.Var(
model.set1,
domain=pe.PositiveReals,
bounds=(2, 5)
)

def obj_rule(model):
return sum(
model.param1[i] * model.var[i]
for i in model.set1
)

model.obj = pe.Objective(
rule=obj_rule,
sense=pe.maximize
)

solver = pe.SolverFactory('IPOPT')
solver.solve(model)

solution_ipopt = model.obj.expr()

#=== pyomo model done, now comes everything pygad related ======================
n_vars = len(model.set1)

def fitness_func(instance, solution, solution_idx):
# desired: something automated like
# return model.obj.expr
# (but that would be too easy and doesn't work)
return sum(
(i+1)**2 * solution[i] for i in range(1, n_vars)
) # yes, that works but is coded manually, I need something automated

ga_instance = pygad.GA(
num_generations = 100,
num_parents_mating = 10,
fitness_func = fitness_func,
sol_per_pop = 100,
num_genes = n_vars,
gene_type = float,
gene_space = [{'low': 2., 'high': 5.} for _ in range(n_vars)],
parent_selection_type = "tournament",
crossover_type = "single_point",
mutation_type = "random",
mutation_percent_genes = 50,
parallel_processing= ["thread", 8]
)

ga_instance.run()
solution, solution_fitness, solution_idx = ga_instance.best_solution()
in fitness_func мне пришлось вручную тип sum ((i+1) ** 2*Решение для i в диапазоне (1, n_vars)) , чтобы создать функцию пригодности в соответствии с модели. дает мне что -то, что выглядит многообещающе, но, конечно, это было бы слишком легко и не работает).
есть способ автоматически преобразовать целевую функцию модели оптимизации Pyomo в выражение, подходящее для передачи к Fitness_func для pygad.ga?

Подробнее здесь: https://stackoverflow.com/questions/797 ... use-as-fit
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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