首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩阵x0上的Scipy最小化函数

矩阵x0上的Scipy最小化函数
EN

Stack Overflow用户
提问于 2019-04-02 22:12:52
回答 1查看 520关注 0票数 1

Scipy optimize.minimize似乎只接受单维x0。我有一个问题,我的x0是形状(n,m)。存在这样的约束,即x0的每一行都应该匹配某个特定值。

我可以简单地遍历每一行并对其执行优化;但是,我希望在某一时刻为列添加约束。

有没有一种已知的方法来处理这个问题?我找不到太多关于它的讨论。我已经尝试了各种版本的广播,扁平化等,但在创建合理的结构方面没有太多的运气。

编辑:我添加了一个最小的代码示例。当使用test_x进行测试时,约束条件返回正确的零。

代码语言:javascript
复制
import numpy as np
import scipy.optimize

def cost(x, p):
    x.reshape(3, 4)
    p.reshape(3, 4)
    return (x * p).sum()

def demand_constraint(x, d):
    x = x.reshape(3, 4)
    b = x.sum(axis=0) - d
    return np.broadcast_to(b, (3, 4)).flatten()

demand = np.array([10, 14, 8, 26])
prices = np.array([[4, 4, 5, 5], [2, 8, 6, 2], [3, 2, 9, 8]])
x0 = np.zeros_like(prices).flatten()
p0 = prices.flatten()

test_x = np.array([[4, 14, 8, 26], [5, 0, 0, 0], [0, 0, 0, 0]])


cost(x0, p0)

cons = ({'type': 'eq', 'fun': demand_constraint, 'args': (demand,)})

output = scipy.optimize.minimize(cost, x0, args=p0, constraints=cons)
EN

回答 1

Stack Overflow用户

发布于 2019-04-11 02:31:52

对于在搜索中遇到这种情况的任何人,处理它的方法是为每个单独的行添加一个约束。因此,上面的demand_constraint将接受一个row_index字段,并返回一个值。

然后,可以将该单个值合并到添加的约束中。继续为形状添加约束(每个约束都有自己的字典)。我的错误是假设约束可以应用于所有x,但它更适合应用于单个x。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55476963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档