離散最適化問題を解くために新たにpymooを使用しています。問題を解決するために差分進化アルゴリズムを使用しようとしています。ドキュメントに従って、私はいくつかのことを試しました..
import numpy as np
from pymoo.factory import get_algorithm, get_crossover, get_mutation, get_sampling
from pymoo.optimize import minimize
from pymoo.core.problem import Problem
class MyProblem(Problem):
def __init__(self):
super().__init__(n_var=2, n_obj=1, n_constr=1, xl=0, xu=10, type_var=int)
def _evaluate(self, x, out, *args, **kwargs):
out["F"] = - np.min(x * [3, 1], axis=1)
out["G"] = x[:, 0] + x[:, 1] - 10
method = get_algorithm("de",pop_size=100,sampling=get_sampling("int_random"),
mutation=get_mutation("int_pm", eta=3.0),eliminate_duplicates=True)
res = minimize(MyProblem(),method, seed=1,save_history=True)
print("Best solution found: %s" % res.X)
print("Function value: %s" % res.F)
print("Constraint violation: %s" % res.CV)
そして、それは良い結果でうまく機能します。したがって、pymoo は離散変数を持つ DE をサポートしていると推測されます。
私はpymooのDEアルゴリズムで利用可能な例を使用しようとしています..
from pymoo.algorithms.soo.nonconvex.de import DE
from pymoo.factory import get_problem
from pymoo.operators.sampling.lhs import LHS
from pymoo.optimize import minimize
problem = get_problem("ackley", n_var=10)
algorithm = DE(
pop_size=100,
sampling=LHS(),
variant="DE/rand/1/bin",
CR=0.3,
dither="vector",
jitter=False
)
res = minimize(problem,
algorithm,
seed=1,
verbose=False)
print("Best solution found: \nX = %s\nF = %s" % (res.X, res.F))
私が直面している問題はtype_var
、この例でパラメーターを渡す場所がわからないことです.. get_prboblem() を試しましたが、未定義と表示されます。ドキュメントでそれを見つけることができませんでした..誰かがtype_var
DEを離散最適化として機能させるためにどこに渡すかを手伝ってもらえますか?