【问题标题】:Discrete Independent/Design Variables ? openmdao 2.2.0离散独立/设计变量 ? openmdao 2.2.0
【发布时间】:2018-03-09 21:17:03
【问题描述】:

可以确定设计变量的下限和上限,例如在抛物面样本内:

top.model.add_design_var('p1.x', lower=-50, upper=50)

但是是否可以强制优化器通过用户输入步骤扫描设计变量?

类似

top.model.add_design_var('p1.x', lower=-50, upper=50, increment=2)

或者将其作为数组引入

top.model.add_design_var('p1.x', [-50,-25,25,50])

【问题讨论】:

    标签: openmdao


    【解决方案1】:

    使用基于梯度的优化器是不可能的。您将需要使用无梯度方法。与 OpenMDAO 2.2 一样,没有任何内置方法可以强制执行这种离散化。您需要围绕问题类使用外部循环才能使其正常工作。

    这是一个简单的例子:

    import numpy as np
    from openmdao.api import Problem, ScipyOptimizeDriver, ExecComp, IndepVarComp
    
    # build the model
    prob = Problem()
    indeps = prob.model.add_subsystem('indeps', IndepVarComp())
    indeps.add_output('x', 3.0)
    indeps.add_output('y', -4.0)
    
    prob.model.add_subsystem('paraboloid', ExecComp('f = (x-3)**2 + x*y + (y+4)**2 - 3'))
    
    prob.model.connect('indeps.x', 'paraboloid.x')
    prob.model.connect('indeps.y', 'paraboloid.y')
    
    # setup the optimization
    prob.driver = ScipyOptimizeDriver()
    prob.driver.options['optimizer'] = 'SLSQP'
    
    prob.model.add_design_var('indeps.y', lower=-50, upper=50)
    prob.model.add_objective('paraboloid.f')
    
    prob.setup()
    
    
    for x in np.arange(-10,12,2): 
        prob['indeps.x'] = x
    
        # could call just run_model if no optimization was desired
        #prob.run_model()
    
        # for each value of x, optimize for y
        prob.run_driver()
    
        # minimum value
        print(prob['paraboloid.f'])
    
        # location of the minimum
        print(prob['indeps.x'])
        print(prob['indeps.y'])
    

    【讨论】:

    • 谢谢。所以这样做是为每个给定的 x 优化“y”,然后用户应该选择最小的目标函数值。顺便说一句,在这种情况下,优化器如何知道 execcomp 的导数?由于没有 declare_partials / compute_partials 我猜优化器计算符号导数?
    • ExecComp 偏导数使用复步计算。所以它们是用数值计算的,而且非常准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多