标签: scipy-optimize

Scipy 优化最小化总是返回初始猜测(SLSQP)

正如标题所解释的,我的程序总是返回最初的猜测。

就上下文而言,该计划正在尝试找到在多个商店之间分配某些产品的最佳方式。每家商店都有对未来几天预计销售商品的预测(sales_data)。该预测不一定必须是整数或大于 1(很少如此),它是统计意义上的期望。因此,如果商店的 sales_data = [0.33, 0.33, 0.33],则预计 3 天后,他们将售出 1 单位的产品。

我想最大限度地减少出售我分配的单位所需的总时间(我想以最快的速度出售它们),我的限制是我必须分配可用的单位,并且我不能分配负数的产品到一家商店。我现在可以接受非整数分配。对于我的初始分配,我将我可用的单位平均分配给所有商店。

下面是我遇到问题的代码的较短版本:

import numpy, random
from scipy.optimize import curve_fit, minimize

unitsAvailable = 50
days = 15

class Store:

    def __init__(self, num):
        self.num = num

        self.sales_data = []


stores = []
for i in range(10):
    # Identifier
    stores.append(Store(random.randint(1000, 9999)))
    # Expected units to be sold that day (It's unlikey they will sell 1 every day)
    stores[i].sales_data = [random.randint(0, 100) / 100 for i in range(days)]
    print(stores[i].sales_data)


def days_to_turn(alloc, store): …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy scipy-optimize scipy-optimize-minimize

4
推荐指数
1
解决办法
6007
查看次数

打印选择的 scipy.optimize.minimize 方法

这是一个简短的问题,但谷歌每次都会指向我找不到答案的文档。

我正在使用 scipy.optimize.minimize。它运作得很好,一切都很好。我可以定义一个要使用的方法,但即使我不指定该方法它也可以工作。

有没有办法获得输出,使用哪种方法?我知道结果类,但那里没有提到方法。

这是一个例子:

solution = opt.minimize(functitionTOminimize,initialGuess, \
                      constraints=cons,options={'disp':True,'verbose':2})
print(solution)
Run Code Online (Sandbox Code Playgroud)

我可以将 value 方法设置为类似slsqp或 的值cobyla,但我想看看程序正在选择什么。我怎样才能得到这些信息?

python scipy scipy-optimize scipy-optimize-minimize

3
推荐指数
1
解决办法
1216
查看次数

尝试使用 scipy 将三角函数拟合到数据

我正在尝试使用scipy.optimize.curve_fit. 我已经阅读了文档这篇 StackOverflow 帖子,但似乎都没有回答我的问题。

我有一些简单的 2D 数据,它们看起来近似于一个三角函数。我想使用scipy.

我的方法如下:

from __future__ import division
import numpy as np
from scipy.optimize import curve_fit



#Load the data
data = np.loadtxt('example_data.txt')
t = data[:,0]
y = data[:,1]


#define the function to fit
def func_cos(t,A,omega,dphi,C):
    # A is the amplitude, omega the frequency, dphi and C the horizontal/vertical shifts
    return A*np.cos(omega*t + dphi) + C

#do a scipy fit
popt, pcov = curve_fit(func_cos, t,y)

#Plot fit …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy scipy-optimize

3
推荐指数
1
解决办法
79
查看次数

如何在 scipy.optimize.minimize 中隐藏 `delta_grad == 0.0` 警告?

我有一个循环,使用 scipy.optimize.minimize 执行数百次优化。不幸的是,我不断收到这个恼人的警告:

C:\Users\Leonidas\Anaconda3\lib\site-packages\scipy\optimize\_hessian_update_strategy.py:186: UserWarning: delta_grad == 0.0. Check if the approximated function is linear. If the function is linear better results can be obtained by defining the Hessian as zero instead of using quasi-Newton approximations.
  'approximations.', UserWarning)
Run Code Online (Sandbox Code Playgroud)

因为我正在运行数百次优化,所以这个警告在循环期间出现了几十次,它只会使控制台变得混乱并掩盖程序输出的其余部分。有没有办法

  1. 检查此警告是否已显示,如果是,则不再显示,或者
  2. 完全压制警告?

python warnings scipy scipy-optimize scipy-optimize-minimize

3
推荐指数
1
解决办法
2114
查看次数

如何理解scipy的quadratic_assignment函数的输出?

我正在尝试使用 scipy 的quadratic_assignment函数,但我无法理解输出如何描述最佳解决方案。这是一个最小的例子,我将一个小矩阵与其自身进行比较:

import numpy as np
from scipy.optimize import quadratic_assignment

# Parameters
n = 5
p = np.log(n)/n   # Approx. 32%

# Definitions
A = np.random.rand(n,n)<p

# Quadratic assignment
res = quadratic_assignment(A, A)

print(res.col_ind)
Run Code Online (Sandbox Code Playgroud)

结果似乎是随机分配的:

[3 0 1 4 2]
[3 2 4 1 0]
[3 2 1 0 4]
[4 3 1 0 2]
[2 3 0 1 4]
...
Run Code Online (Sandbox Code Playgroud)

但是,根据文档,col_ind应该是与 B 的节点找到的最佳排列相对应的列索引。由于输入矩阵相等(B==A),因此我希望身份分配[0 1 2 3 4]能够弹出。更改n为更大的值并没有帮助。

我有什么地方做错了吗?

python scipy-optimize

2
推荐指数
1
解决办法
199
查看次数

使用 Scipy Optimizer 和 Tensorflow 2.0 进行神经网络训练

在引入 Tensorflow 2.0 之后,scipy 接口 (tf.contrib.opt.ScipyOptimizerInterface) 已被删除。但是,我仍然想使用 scipy 优化器scipy.optimize.minimize(method='L-BFGS-B')来训练神经网络(keras 模型序列)。为了使优化器工作,它需要一个函数fun(x0)作为输入,其中x0是一个形状为 (n,) 的数组。因此,第一步是“展平”权重矩阵以获得具有所需形状的向量。为此,我修改了https://pychao.com/2019/11/02/optimize-tensorflow-keras-models-with-l-bfgs-from-tensorflow-probability/提供的代码。这提供了一个函数工厂来创建这样一个函数乐趣(x0)。然而,代码似乎不起作用,损失函数并没有减少。如果有人能帮我解决这个问题,我将不胜感激。

这是我正在使用的一段代码:

func = function_factory(model, loss_function, x_u_train, u_train)

# convert initial model parameters to a 1D tf.Tensor
init_params = tf.dynamic_stitch(func.idx, model.trainable_variables)
init_params = tf.cast(init_params, dtype=tf.float32)

# train the model with L-BFGS solver
results = scipy.optimize.minimize(fun=func, x0=init_params, method='L-BFGS-B')


def loss_function(x_u_train, u_train, network):
    u_pred = tf.cast(network(x_u_train), dtype=tf.float32)
    loss_value = tf.reduce_mean(tf.square(u_train - u_pred))
    return tf.cast(loss_value, dtype=tf.float32)


def function_factory(model, loss_f, x_u_train, …
Run Code Online (Sandbox Code Playgroud)

python neural-network keras tensorflow scipy-optimize

1
推荐指数
1
解决办法
4092
查看次数

scipy.optimize.curve_fit 用于逻辑函数

我正在尝试使用 Jupyter Notebook 绘制逻辑函数。我可以很好地绘制它,但是使用 scipy.optimize.curve_fit 的逻辑函数不起作用。它返回直线坐标。

如何绘制逻辑回归线?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
%matplotlib inline

df = pd.read_csv('https://gist.githubusercontent.com/shinokada/76070a0927fa1fac01eeaed298757a26/raw/2707a1bd7cba80613a01a2026abeb9f587dbaee5/logisticdata.csv')

x=df.T.iloc[0]
y=df.T.iloc[1]

def logifunc(x,l,c,k):
    return l / (1 + c*np.exp(-k*x))

popt, pcov = curve_fit(logifunc, x, y, p0=[-150,1,1])
print(*popt)

x_data = np.linspace(170,205,num=100)
print(logifunc(x_data, *popt))

plt.scatter(x,y,label='Logistic function')
plt.plot(x_data, logifunc(x_data, *popt), 'r-',label='Fitted function')

plt.title("Logistic")
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(170,210)
plt.ylim(-210,-160)
plt.legend()
plt.show()

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

scipy logistic-regression scipy-optimize

1
推荐指数
1
解决办法
5509
查看次数

非线性约束的优化问题

我是优化问题的新手,正在研究一个简单的最大化问题,我可以在 Excel 中非常简单地解决这个问题。但是,我需要在 Python 中扩展它并需要一些帮助。

我有一份不同食物的菜单,我需要最大限度地提高我的能量输出。例子:

食物 卡路里 活力
蛋白质 100 60
蛋白质 羊肉 200 40
蛋白质 200 38
碳水化合物 香蕉 200 25
碳水化合物 土豆 200 30
碳水化合物 200 40
胖的 牛油果 450 50
胖的 奶酪 400 60
胖的 奶油 500 55

鉴于以下限制,我需要最大化能量(e):

  1. 每个 Macros(m) 只能消耗 1 个食物项目 (i)。所以我需要一个指示变量 (0/1) 来从 m - 蛋白质、脂肪和碳水化合物中的每一个中只选择 1 个。
  2. 卡路里总数 (c) 不应超过一个恒定值假设每个项目有 1 份(对此没有限制)

问题表述:

变量: X (m,i) ? 二元变量 = {1 ,如果宏 m 和项目 i 被选择,0 否则}

最大化 …

python linear-programming pulp mixed-integer-programming scipy-optimize

0
推荐指数
1
解决办法
124
查看次数