Мутация для проблемы MixedVariable в pymooPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мутация для проблемы MixedVariable в pymoo

Сообщение Anonymous »

У меня есть задача многоцелевой оптимизации, которую необходимо решить, чтобы минимизировать две целевые функции из 6 переменных. первая переменная — целое число, а остальные — вещественные. Я использую MixedVariableGA() для решения проблемы. Однако мутация не работает с этим классом. Hear — это часть разработанного мною кода:

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

class Multi_Objective_Problem(ElementwiseProblem):

def __init__(self, cost_fun_evaluator, **kwargs):

self.cost_fun_evaluator = cost_fun_evaluator
x1_L = 10       # Integer variable
x1_U = 500      # Integer variable
x2_L = 1.0
x2_U = 8.0
x3_L = 2.0
x3_U = 9.0
x4_L = 2.0
x4_U = 9.0
x5_L = 2.0
x5_U = 30.0
x6_L = 2.0
x6_U = 30.0
vars = {'x1': Integer(bounds=(x1_L, x1_U)),
'x2': Real(bounds=(x2_L, x2_U)),
'x3': Real(bounds=(x3_L, x3_U)),
'x4': Real(bounds=(x4_L, x4_U)),
'x5': Real(bounds=(x5_L, x5_U)),
'x6': Real(bounds=(x6_L, x6_U))}

super().__init__(n_obj=2, n_ieq_constr=0, vars=vars)

def _evaluate(self, X, out, *args, **kwargs):
x1, x2, x3, x4, x5, x6 = X["x1"], X["x2"], X["x3"], X["x4"], X["x5"], X["x6"]
solution = [x1, x2, x3, x4, x5, x6]
y1, y2 = self.cost_fun_evaluator.objective_function(solution)
out["F"] = [y1, y2]

problem = Multi_Objective_Problem(cost_fun_evaluator=cost_fun)
mutation = PolynomialMutation(prob=0.25, eta=8)

algorithm = MixedVariableGA(pop_size=110,
survival= RankAndCrowding(),
mutation=mutation,
)

# Run GA:
result = minimize(problem,
algorithm, ('n_gen', 100),
seed=1,
verbose=True)
Я использую семя = 1, чтобы оценить влияние мутации на результаты, но результаты постоянны для каждого значения проб и эта в PolynomialMutation().
Я также определяю собственный класс мутаций для выполнения мутаций в зависимости от типа переменных следующим образом:

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

    class CustomMutation(Mutation):
def _do(self, problem, X, **kwargs):
for i in range(len(X)):
if np.random.random() < 0.9:  # Mutation probability
if isinstance(problem.vars["Len"], Integer):
X[i]["x1"] = np.random.randint(problem.vars["x1"].bounds[0], problem.vars["x1"].bounds[1] + 1)
if isinstance(problem.vars["x2"], Real):
X[i]["x2"] = np.random.uniform(problem.vars["x2"].bounds[0], problem.vars["x2"].bounds[1])
if isinstance(problem.vars["x3"], Real):
X[i]["x3"] = np.random.uniform(problem.vars["x3"].bounds[0], problem.vars["x3"].bounds[1])
if isinstance(problem.vars["x4"], Real):
X[i]["x4"] = np.random.uniform(problem.vars["x4"].bounds[0], problem.vars["x4"].bounds[1])
if isinstance(problem.vars["x5"], Real):
X[i]["x5"] = np.random.uniform(problem.vars["x5"].bounds[0], problem.vars["x5"].bounds[1])
if isinstance(problem.vars["x6"], Real):
X[i]["x6"] = np.random.uniform(problem.vars["x6"].bounds[0],   problem.vars["x6"].bounds[1])
return X

и использовал этот класс при определении алгоритма:

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

      algorithm = MixedVariableGA(pop_size=110,
survival= RankAndCrowding(),
mutation=CustomMutation(),
)
Однако результаты постоянны. Пожалуйста, помогите мне, как я могу определить оператор мутации для этой проблемы в MixedVariableGA().
Спасибо
Я ожидаю, что при изменении вероятности мутации будут разные результаты. Однако результаты постоянны независимо от значения вероятности мутации.

Подробнее здесь: https://stackoverflow.com/questions/788 ... m-in-pymoo
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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