首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pymoo重新启动优化

使用Pymoo重新启动优化
EN

Stack Overflow用户
提问于 2020-08-18 02:33:36
回答 1查看 180关注 0票数 0

我正在尝试重新启动pymoo中的优化。

我有一个问题被定义为:

代码语言:javascript
复制
class myOptProb(Problem):
    """my body goes here"""

algorithm = NSGA2(pop_size=24)  

problem = myOptProblem(opt_obj=dp_ptr,
                       nvars=7,
                       nobj=4,
                       nconstr=0,
                       lb=0.3 * np.ones(7),
                       ub=0.7 * np.ones(7),
                       parallelization=('threads', cpu_count(),))

res = minimize(problem,
               algorithm,
               ('n_gen', 100),
               seed=1,
               verbose=True)

在优化过程中,我将设计矢量和结果写入.csv文件。design_vectors.csv的一个例子是:

代码语言:javascript
复制
5.000000000000000000e+00, 4.079711567060104183e-01, 6.583544872784267143e-01, 4.712364759485179189e-01, 6.859360188593541796e-01, 5.653765991273791425e-01, 5.486782880836487131e-01, 5.275405748345924906e-01,
7.000000000000000000e+00, 5.211287914743063521e-01, 6.368123569438421949e-01, 3.496693260479644128e-01, 4.116734716044557763e-01, 5.343037085833151068e-01, 6.878382993278697732e-01, 5.244120877022839800e-01, 
9.000000000000000000e+00, 5.425317846613321171e-01, 5.275405748345924906e-01, 4.269449637288642574e-01, 6.954464617649794844e-01, 5.318980876983187001e-01, 4.520564690494201510e-01, 5.203792876471586837e-01, 
1.100000000000000000e+01, 4.579502451694219545e-01, 6.853050113762846340e-01, 3.695822666721857441e-01, 3.505318077758549089e-01, 3.540316632186925050e-01, 5.022648662707586142e-01, 3.086099221096791911e-01, 
3.000000000000000000e+00, 4.121775968257620493e-01, 6.157117313805953174e-01, 3.412904026310568106e-01, 4.791574104703620329e-01, 6.634382012372381787e-01, 4.174456593494717538e-01, 4.151101354345394512e-01, 

results.csv为:

代码语言:javascript
复制
5.000000000000000000e+00, 1.000000000000000000e+05, 1.000000000000000000e+05, 1.000000000000000000e+05, 1.000000000000000000e+05, 
7.000000000000000000e+00, 1.041682833582066703e+00, 3.481167125962069189e-03, -5.235115318709097909e-02, 4.634480813876099177e-03, 
9.000000000000000000e+00, 1.067730307802263967e+00, 2.194702810002167534e-02, -3.195892023664552717e-01, 1.841232582360878426e-03, 
1.100000000000000000e+01, 8.986880344052742275e-01, 2.969022150977750681e-03, -4.346692726475211849e-02, 4.995468429444801205e-03, 
3.000000000000000000e+00, 9.638770499257821589e-01, 1.859596479928402393e-02, -2.723230073142696162e-01, 1.600910928983005632e-03, 

第一列是设计向量的索引-因为我是异步线程,所以我指定了索引。

我看到应该可以通过pymoo.algorithms.nsga2.NSGA2的采样参数重新启动优化,但我找不到可用的示例。关于人口和个人的文档也不清楚。那么,如何使用先前的结果重新启动模拟?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-18 16:37:58

是的,你可以用一个种群来初始化algorithm对象,而不是随机执行。

我为有偏差的初始化写了一个小教程:https://pymoo.org/customization/initialization.html

因为在您的示例中,数据已经存在于CSV或内存文件中,您可能希望创建一个虚拟问题(在我的示例中称为Constant )来设置Population对象中的属性。(在population中,需要设置XFGCVfeasible )。另一种方法是直接设置属性...

带有虚拟问题的偏置初始化如下所示。如果您已经使用pymoo存储csv文件,也可以直接np.save Population对象并加载它。那么所有的中间步骤都是不必要的。

我计划在未来改进检查点的实现。所以,如果你有更多的反馈和用例,这些都是不可能的,请让我知道。

代码语言:javascript
复制
import numpy as np

from pymoo.algorithms.nsga2 import NSGA2
from pymoo.algorithms.so_genetic_algorithm import GA
from pymoo.factory import get_problem, G1, Problem
from pymoo.model.evaluator import Evaluator
from pymoo.model.population import Population
from pymoo.optimize import minimize


class YourProblem(Problem):

    def __init__(self, n_var=10):
        super().__init__(n_var=n_var, n_obj=1, n_constr=0, xl=-0, xu=1, type_var=np.double)

    def _evaluate(self, x, out, *args, **kwargs):
        out["F"] = np.sum(np.square(x - 0.5), axis=1)


problem = YourProblem()

# create initial data and set to the population object - for your this is your file
N = 300
X = np.random.random((N, problem.n_var))
F = np.random.random((N, problem.n_obj))
G = np.random.random((N, problem.n_constr))


class Constant(YourProblem):

    def _evaluate(self, x, out, *args, **kwargs):
        out["F"] = F
        out["G"] = G


pop = Population().new("X", X)
Evaluator().eval(Constant(), pop)

algorithm = GA(pop_size=100, sampling=pop)

minimize(problem,
         algorithm,
         ('n_gen', 10),
         seed=1,
         verbose=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63456711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档