用于基于仿真的优化的pythonscipy

用于基于仿真的优化的pythonscipy,python,scipy,mathematical-optimization,Python,Scipy,Mathematical Optimization,我开始使用pythonscipy进行基于模拟的优化。这里是一个简单的例子,在实际情况中,x是模拟模型的输入(随时间变化的常数变量),它有一个下限和上限(40和80)。t_sim是x和时间的函数。该模型的模拟时间为43200秒,目标是在模拟时间内最小化t_sim import numpy as np from scipy import optimize def cost(x): # in the real case, x is an input to the simulation and

我开始使用pythonscipy进行基于模拟的优化。这里是一个简单的例子,在实际情况中,x是模拟模型的输入(随时间变化的常数变量),它有一个下限和上限(40和80)。t_sim是x和时间的函数。该模型的模拟时间为43200秒,目标是在模拟时间内最小化t_sim

import numpy as np
from scipy import optimize

def cost(x):
    # in the real case, x is an input to the simulation and  
    #  t_sim is based on a simulation result (t_sim(x))
    TimeInput = np.array([0.,43200.])
    t_sim = np.array([x[0],x[0]])

    obj = np.trapz(t_sim, TimeInput)

    return obj
x0 = np.array([70])
bnds = ((40, 80),)
res = optimize.minimize(cost, x0, method='TNC', bounds=bnds)
print res.fun
print res.x

优化函数的值应该是多少数量级?在这个简单的例子中,它是1728000。目标是否应缩放为1?这与我的第二个问题有关:解算器设置的默认值(如终止公差、用于数值雅可比矩阵的步长、用于直线搜索的最大步长等)是否基于目标函数的某个数量级?

我知道这是您的第二次尝试(在第一次尝试结束后)它仍然非常广泛,特别是当询问所有可用的优化器时。(1) 你为什么不试试?只需比较缩放版本和非缩放版本之间的行为。容易做对吗?(2) 当你只有一个变量时,为什么你要使用为多元优化设计的方法?不要这样做(3)客观尺度通常比可变尺度问题小得多!(4) 大多数停止准则基于梯度或任何二阶信息。可能会有一些(新的-旧的)批评。(5)在TNC内部调整CG和co(如你的例子)可能更相关。(我刚刚意识到,我想到的老问题,基本上是问同样的问题,来自另一个用户。如果不是你,我为我的第一句话道歉)牛顿法将通过有限差分得到梯度。在进行昂贵的功能评估时,这可能不是最好的方法。通常更好的方法是使用不需要梯度的方法,我看到这是您的第二次尝试(在第一次尝试结束后),而且它仍然非常广泛,特别是在询问所有可用的优化器时。(1) 你为什么不试试?只需比较缩放版本和非缩放版本之间的行为。容易做对吗?(2) 当你只有一个变量时,为什么你要使用为多元优化设计的方法?不要这样做(3)客观尺度通常比可变尺度问题小得多!(4) 大多数停止准则基于梯度或任何二阶信息。可能会有一些(新的-旧的)批评。(5)在TNC内部调整CG和co(如你的例子)可能更相关。(我刚刚意识到,我想到的老问题,基本上是问同样的问题,来自另一个用户。如果不是你,我为我的第一句话道歉)牛顿法将通过有限差分得到梯度。在进行昂贵的功能评估时,这可能不是最好的方法。通常最好使用不需要渐变的方法,