Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用nevergrad求整数域上代价函数的最小值?_Python_Python 3.x_Mathematical Optimization_Nevergrad - Fatal编程技术网

Python 如何使用nevergrad求整数域上代价函数的最小值?

Python 如何使用nevergrad求整数域上代价函数的最小值?,python,python-3.x,mathematical-optimization,nevergrad,Python,Python 3.x,Mathematical Optimization,Nevergrad,作为论文的一部分,我们考虑使用。然而,遗憾的是,它并不总是返回相同的结果,也不是最理想的结果 我们尝试了DiscreteOnePlusOne作为优化器,但没有找到最佳结果OnePlusOne工作正常,但没有给出最佳解决方案,需要以下提示: if s1 < s2*(1+r0): return np.Inf 我们怎样才能使自己更健壮 我们应该使用哪个优化器 有没有办法在不同的“初始条件”下多次运行nevergrad,并在所有多次尝试中获得最佳结果 你为什么要寻找一个不可微的解?如果您

作为论文的一部分,我们考虑使用。然而,遗憾的是,它并不总是返回相同的结果,也不是最理想的结果

我们尝试了
DiscreteOnePlusOne
作为优化器,但没有找到最佳结果
OnePlusOne
工作正常,但没有给出最佳解决方案,需要以下提示:

if s1 < s2*(1+r0):
    return np.Inf
  • 我们怎样才能使自己更健壮
  • 我们应该使用哪个优化器
  • 有没有办法在不同的“初始条件”下多次运行nevergrad,并在所有多次尝试中获得最佳结果

  • 你为什么要寻找一个不可微的解?如果您确实在寻找整数
    s1
    s2
    ,那么这个搜索空间非常小,您可以直接搜索-否?这是一个玩具优化,而不是你感兴趣的实际功能?或者这是一个更一般的问题?@modesitt搜索空间比100x100复杂。这只是一个玩具示例,说明nevergrad仍然无法找到最佳解决方案。
    然而,遗憾的是,它并不总是返回相同的结果,也不总是返回最佳结果。
    您的期望是什么?前者是因为非受控随机种子(见文档),后者只是显示了这些解算器的一般保证:无(不保证局部或全局收敛)。在不具有代表性的玩具问题上进行这样的调优对我来说毫无意义,因为传输到其他实例的统计信息可能会扼杀每次调优。在没有测试床的情况下调整启发式并关心统计数据通常是个坏主意,询问没有访问您的测试床的其他人也是如此。@sascha有没有办法运行100个独立的最小化过程并采取最频繁的策略,或者从所有100次尝试中选择一个导致最佳结果的策略?
    !pip install nevergrad
    import numpy as np
    def optimal(r0: float, s1:int, s2:int):
      r0 = r0/100
      if s1 < s2*(1+r0):
        return np.Inf
    
      p1=1-np.power(1-r0,s1)
      r1=r0/p1
      p2=1-np.power(1-r1,s2)
      return 1/s1 + p1/s2 + p1*p2
    
    import nevergrad as ng
    
    def findBestStategy(r0: float):
      '''
      r0 is in %
      '''
      parametrization = ng.p.Instrumentation(
          r0 = r0, 
          s1=ng.p.Scalar(lower=1, upper=100).set_integer_casting(),
          s2=ng.p.Scalar(lower=1, upper=100).set_integer_casting(),
      )
      optimizer = ng.optimizers.OnePlusOne(parametrization=parametrization, budget=2000, num_workers=1)
      recommendation = optimizer.minimize(optimal)
      return recommendation.kwargs
    findBestStategy(1)
    {'r0': 1, 's1': 23, 's2': 5}
    
    optimal(1, 23,5)
    0.13013924406458133
    optimal(1, 24,5) 
    0.13007783167425113