Глобальная оптимизация: как найти тот же минимум более последовательно? - PullRequest
0 голосов
/ 03 декабря 2018

В настоящее время я использую тазобедренный анализ из библиотеки scipy, чтобы найти оптимальный x (где x состоит из 4 факторов), который оптимизирует мою целевую функцию.Когда я запускаю его несколько раз, он дает разные результаты для каждого запуска.Есть ли способ сделать результат более согласованным (т. Е. Минимизировать параметры функции на протяжении нескольких итераций)?

cons = [
    {
        'type': 'eq',
        'fun': lambda x: x[0] + x[1] + x[2] - 1
    },
    {
        'type': 'ineq',
        'fun': lambda x: (w_0 / prob_death(T)[T-1]) - x[3]
    },
    {
        'type': 'ineq',
        'fun': lambda x: x[3] - 10000
     }
]

bounds = ( (0, 1), (0, 1), (0, 1), (0, 1'000'000)) )

res = basinhopping(func = utility_expected,
          x0 = np.array([0.33, 0.33, 0.33, 50000]),
          minimizer_kwargs = {"method": 'SLSQP',
          "bounds": bounds,
          "constraints": cons,
          "options": {
              "eps": 0.01,
              "ftol": 0.001
              }
          }, 
          disp = False,
          interval = 40,
          niter = 250)

1 Ответ

0 голосов
/ 03 декабря 2018

Так что я не знаком, в частности, со скайппингом, но если я правильно читаю, вы дали ему эпсилон 0,01 для числового приближения якобиана.Тем не менее, ваши переменные масштабируются очень по-разному.(0-1 против 0-1000000) Это может привести к странному поведению.Подумайте о масштабировании вашей четвертой переменной в 0-1.

Кроме того, 250 итераций - это действительно крошечное число для того, что вы просите оптимизатора.Попробуйте заставить его работать дольше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...