- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我用大写字母表示矩阵,用小写字母表示向量。
我需要为向量求解以下线性不等式系统 v
:
min(rv - (u + Av), v - s) = 0
0
是一个零向量。
r
是标量,
u
和
s
是向量,而
A
是一个矩阵。
z = v-s
,
B=rI - A
,
q=-u + Bs
,我可以将之前的问题改写为
linear complementarity problem并希望使用 LCP 求解器,例如来自
openopt
:
LCP(M, z): min(Bz+q, z) = 0
z'(Bz+q) = 0
z >= 0
Bz + q >= 0
A
, 一世
A11
, A12
, A21
, A22
使用 scipy.sparse.diags
A = scipy.sparse.bmat([[A11, A12], [A21, A22]])
A
不是对称的,因此一些有效的转换为 QP
问题将不起作用)openopt.LCP
显然无法处理稀疏矩阵:当我运行它时,我的计算机崩溃了。一般情况下,
A.todense()
会导致内存错误。同样,
compecon-python
无法解决
LCP
稀疏矩阵的问题。
LCP
实现适合这个问题?
from numpy.random import rand
from scipy import sparse
n = 3000
r = 0.03
A = sparse.diags([-rand(n)], [0])
s = rand(n,).reshape((-1, 1))
u = rand(n,).reshape((-1, 1))
B = sparse.eye(n)*r - A
q = -u + B.dot(s)
q.shape
Out[37]: (3000, 1)
B
Out[38]:
<3000x3000 sparse matrix of type '<class 'numpy.float64'>'
with 3000 stored elements in Compressed Sparse Row format>
openopt.LCP
与我的矩阵崩溃,我认为它在继续之前将矩阵转换为密集矩阵 compecon-python
完全失败并出现一些错误,它显然需要密集矩阵并且没有稀疏性的后备B
不是半正定的,所以我不能将线性互补问题 (LCP) 改写为凸二次问题 (QP) 最佳答案
这个问题有一个非常有效的(线性时间)解决方案,尽管它需要一些讨论......
第零:澄清问题/LCP
根据评论中的澄清,@FooBar 表示原始问题是元素方面的 min
;我们需要找到一个 z
(或 v
)使得
either the left argument is zero and the right argument is non-negative or the left argument is non-negative and the right argument is zero
z
中有一个二次项(Bz+q)'z,但原始问题没有(只有线性项 Bz+q 和 z)。我将在下面利用这一事实。
- Create four matrices A11, A12, A21, A22 using scipy.sparse.diags
- And stack them together as A = scipy.sparse.bmat([[A11, A12], [A21, A22]])
A
的块对角结构在所有后续操作中都保留矩阵。并且每个后续操作都是矩阵向量乘法或内积。这意味着该程序实际上可以成对分离
z
(或
v
)变量。
A11,...
是尺寸
n
来自
n
.然后批判性地注意到
z_1
和
z_{n+1}
出现
只有在方程式和术语中,而不是在其他地方。所以问题可分为
n
问题,每个问题都是二维的。因此,我以后将解决二维问题,您可以在
n
上进行串行化或并行化。如您所见,没有稀疏矩阵或大型 opt 包。
find z such that (elementwise) min( Bz + q , z ) = 0, or declare that no such `z` exists.
B
现在是 2x2,这个几何问题对应于我们可以手动枚举的四个标量不等式(我将它们命名为 a1、a2、z1、z2):
“a1”: B11*z1 + B12*z2 + q1 >=0
“a2”: B21*z1 + B22*z2 + q2 >=0
“z1”: z1 >= 0
“z2:” z2 >= 0
z
其中实现了以下解决方案之一(并非完全不同,但无关紧要):
z
存在。
B^-1q
(请注意,即使 B 不是 psd,我也假设它是可逆的/满级)。所以:
if B^-1q is elementwise nonnegative, return z = B^-1q.
elif q is elementwise nonnegative, return z = 0.
elif -q2/B22 >=0 and -B22/B12*q2 + q1 >=0, return z1= 0, z2 = -q2/B22.
elif -q1/B11 >=0 and -B21/B11*q1 + q2 >=0, return z1 = -q1/B11, z2 =0.
else return None
None
.然后对所有
n
做同样的事情2D 问题,并连接向量。如果有任何是 None,则问题不可行(所有 None)。否则,你有你的答案。
关于python - 具有稀疏矩阵的 LCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403066/
这是代码片段。 请说出这种用小内存存储大数据的算法是什么。 public static void main(String[] args) { long longValue = 21474836
所以我使用 imap 从 gmail 和 outlook 接收电子邮件。 Gmail 像这样编码 =?UTF-8?B?UmU6IM69zq3OvyDOtc68zrHOuc67IG5ldyBlbWFpb
很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如 (define (larger x y) (if (> x
Azure 恢复服务保管库有两个备份配置选项 - LRS 与 GRS 这是一个有关 Azure 恢复服务保管库的问题。 当其驻留区域发生故障时,如何处理启用异地冗余的恢复服务保管库?如果未为恢复服务启
说,我有以下实体: @Entity public class A { @Id @GeneratedValue private Long id; @Embedded private
我有下一个问题。 我有下一个标准: criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 如果我的
如果这是任何类型的重复,我会提前申请,但我找不到任何可以解决我的具体问题的内容。 这是我的程序: import java.util.Random; public class CarnivalGame{
我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。 结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。 然后将其用于在单独的集合中进行
是否可以在正则表达式中创建 OR 条件。 我正在尝试查找包含此类模式的文件名列表的匹配项 第一个案例 xxxxx-hello.file 或者案例二 xxxx-hello-unasigned.file
该程序只是在用户输入行数时创建菱形的形状,因此它有 6 个 for 循环; 3 个循环创建第一个三角形,3 个循环创建另一个三角形,通过这 2 个三角形和 6 个循环,我们得到了一个菱形,这是整个程序
我有一个像这样的查询字符串 www.google.com?Department=Education & Finance&Department=Health 我有这些 li 标签,它们的查询字符串是这样
我有一个带有静态构造函数的类,我用它来读取 app.config 值。如何使用不同的配置值对类进行单元测试。我正在考虑在不同的应用程序域中运行每个测试,这样我就可以为每个测试执行静态构造函数 - 但我
我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。 map, int > myContainer; myContainer.insert(make_
我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。 作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属
(1) =>CREATE TABLE T1(id BIGSERIAL PRIMARY KEY, name TEXT); CREATE TABLE (2) =>INSERT INTO T1 (name)
我不确定在使用别名时如何解决不明确的列引用。 假设有两个表,a 和 b,它们都有一个 name 列。如果我加入这两个表并为结果添加别名,我不知道如何为这两个表引用 name 列。我已经尝试了一些变体,
我的查询是: select * from table where id IN (1,5,4,3,2) 我想要的与这个顺序完全相同,不是从1...5,而是从1,5,4,3,2。我怎样才能做到这一点? 最
我正在使用 C# 代码执行动态生成的 MySQL 查询。抛出异常: CREATE TABLE dump ("@employee_OID" VARCHAR(50)); "{"You have an er
我有日期 2016-03-30T23:59:59.000000+0000。我可以知道它的格式是什么吗?因为如果我使用 yyyy-MM-dd'T'HH:mm:ss.SSS,它会抛出异常 最佳答案 Sim
我有一个示例模式,它的 SQL Fiddle 如下: http://sqlfiddle.com/#!2/6816b/2 这个 fiddle 只是根据 where 子句中的条件查询示例数据库,如下所示:
我是一名优秀的程序员,十分优秀!