有什么好的工具可以解决Linux上的整数程序吗?
我有一个小问题,我想计算以节省时间:D.它是一种子集和问题.我有一个大约20个整数值的列表,我想计算满足一定最小值的最小和的子集.你可以用整数程序来表达这个......就像这样
\sum_{i=1}^{n} w*x -> min
Run Code Online (Sandbox Code Playgroud)
同
\sum_{i=1}^{n} w*x >= c with x \in \{0,1\}
Run Code Online (Sandbox Code Playgroud)
或者还有其他好办法吗?
我一直在干扰C#中的一个想法来创建一个软件(用于伪个人使用),但遇到了实现问题.嗯......也许他们是我不知道的设计问题,但我只是简直无法弄清楚.
考虑我们有以下"数据库":
Foo + Bar = Foobar
Baz + Qux = Bazqux
Foobar + Bazqux = Foobarbazqux
Run Code Online (Sandbox Code Playgroud)
这些是用于创建所述项目的配方.使用一个和一个,我们创建一个结果,可以进一步成为另一个食谱的成分.FooBarFoobar
现在想我们需要找出该项目的完整配方Foobarbazqux.对于人类的思想和智慧,它相对容易:
We need Foobarbazqux
Foobarbazqux = Foobar + Bazqux
Foobar = Foo + Bar
Bazqux = Baz + Qux
Foobarbazqux = Foo + Bar + Baz + Qux
Run Code Online (Sandbox Code Playgroud)
当然,如果我们拥有所有成分,我们可以"运行" 配方,并按照上面几段的顺序创建项目并执行每个配方.(那样:我们首先创建Foobar,然后Bazqux将两者结合起来得到最终结果.)
但在现实的时候,数据库是很多大.我想这就是计算机应该进入的地方.通过一个可用的软件,机器可以轻松找到所有的成分和执行(制作)步骤并将其提供给用户,因此我们不需要通过所有条目来读取手.
由于 Excel Solver 在数千次优化上运行速度相当慢(原因是它使用电子表格作为界面),我试图在 C++ 中实现类似的(特定于问题的)求解器(使用 Visual Studio 2010,在 Win 上) 7 64 位平台)。我会通过 VBA 中的 Declare 语句包含 DLL,并且已经有这样做的经验,所以这不是问题。
我的问题是最小化经验数据和非线性但平滑的目标函数之间的平方误差之和,并且问题将包括非负性(X>=0)甚至正性约束(例如X>=0.00000001) ,其中 X 表示决策变量。
我正在寻找一个强大的、经过验证的实现。它可能是已建立的图书馆的一部分。例如,我已经研究过 ALGLIB 所存储的内容(请参阅http://www.alglib.net/optimization/),并且似乎只有他们的算法之一接受有界约束。但我不知道它的价值是什么,这就是为什么我试图收集一些意见。
或者,另一方面,是否建议用这样的基本约束来增强 ALGLIB 的 Levenberg-Marquardt 算法,例如拒绝每个不满足我的约束的中间解决方案?(我猜这不会成功,但仍然值得一问)
有时<statement> solve_direct(我通常通过调用<statement> try)列出一些库定理并说“当前的目标可以直接解决:……”。
设<theorem>一个搜索结果solve_direct,然后在大多数情况下我可以证明<statement> by (rule theorem)。
然而,有时这样的证明不被接受,导致错误信息“应用初始证明方法失败”。
是否有一种通用的、不同的技术来重用由 找到的定理solve_direct?
还是要看个人情况?我可以尝试找出一个最小的例子并将其附加到这个问题上。
在我的多线程 c# 应用程序中使用 Microsoft Solver Foundation 时遇到问题:
我同时运行两个线程,并在每个线程上调用这样的函数:
private void exampleFunction()
{
SolverContext context;
Model model;
for(int i=0;i<10;i++)
{
context = SolverContext.GetContext();
model = context.CreateModel();
//adding decisions, constraints and goal to model
Solution sol = context.Solve();
string s = sol.Quality.ToString();//and here sometimes I get that sol is null!
context.ClearModel();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来我在每个线程中的上下文都是同一个对象,所以当我调用
context.ClearModel();
Run Code Online (Sandbox Code Playgroud)
在线程 1 中,那么在线程 2 中也很清楚(即使线程 2 中的问题尚未解决)。
所以问题是:有没有办法在 MSF 中同时求解两个模型?是否可以声明两个不同的 SolverContext?
sympysolve() 的解决方案是否以某种方式排序?是从最小解到最大解吗?如何强制解决方案的非负性?
在我的问题中,我需要独特的最小正解。我感谢所有的帮助
在 Isabelle,我经常发现我可以使用不同的求解器成功地证明一个目标。
通常,我更愿意使用可以证明目标的最弱求解器。根据我目前与 Isabelle 的经验,我目前的理解是,按照强度增加和速度降低的顺序,常见的逻辑求解器排名如下(即何时rule和simp两者都起作用,rule应该使用等):
rule < simp < auto < fastforce < force
Run Code Online (Sandbox Code Playgroud)
这样对吗?这里blast适合放哪里?
我检查编程和伊莎贝尔/ HOL(PDF)证明和与伊莎贝尔/ HOL具体语义,但无法找到答案。
对于周期函数,我如何知道sympy我想要某个域上的所有解决方案?
例子:
import sympy
import sympy.parsing.sympy_parser
SympyExpression = sympy.parsing.sympy_parser.parse_expr( 'sin(pi* x)*sin(pi*y)' )
Variables = [sympy.Symbol('x'),sympy.Symbol('y') ]
Zeros = sympy.solve( f = SympyExpression, symbols = Variables )
print Zeros
Run Code Online (Sandbox Code Playgroud)
输出:
>>>> [{x: 0}, {x: 1}, {y: 0}, {y: 1}]
Run Code Online (Sandbox Code Playgroud)
显然,解决方案是正确的,但并不完整。
如果我想要实域上的所有零怎么办:
-2 < x < 2
-2 < y < 2
Run Code Online (Sandbox Code Playgroud)
不知何故,如果能获得该域上的所有解决方案就好了:
x = k -> k in [-2,-1,0,1,2]
OR
y = j -> j in [-2,-1,0,1,2]
Run Code Online (Sandbox Code Playgroud)
为了便于说明,我提供了Wolfram Alpha 的链接,它绘制了这个 2D 曲面。
我正在尝试编写一个可以解决数独的算法。现在,我的代码可以工作,直到 supplyGrid 没有数字为止。当它发生时,它应该返回并尝试另一个号码,对吗?老实说,我不知道如何实现这一目标。
var grid = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, …Run Code Online (Sandbox Code Playgroud)基于这个问题和解决方案——在 Eigen3 中实现 Bartels-Stewart 算法?-- 我正在尝试使用 Eigen 库求解 Lyapunov 方程 (AX + XA^T = C),但仅限于实矩阵。
下面的 R(使用 c++)代码有效,但涉及复数。它绝对可以简化(因为在这个框架中,没有 B 矩阵),但主要的困难是对复数的依赖。在这种情况下,真正的舒尔形式似乎是标准的替代方案,但是特征函数 matrix_function_solve_triangular_sylvester 不起作用,因为输入矩阵不是上三角,而是上块三角。我很乐意看到以下建议:a) 消除对复数的需求,然后如果可能的话,b) 任何效率改进。
library(expm)
library(Rcpp)
library(RcppEigen)
library(inline)
# R -----------------------------------------------------------------------
d<-6 #dimensions
A<-matrix(rnorm(d^2),d,d) #continuous time transition
G <- matrix(rnorm(d^2),d,d)
C<-G %*% t(G) #continuous time pos def error
AHATCH<-A %x% diag(d) + diag(d) %x% A
Xtrue<-matrix(-solve(AHATCH,c(C)), d) #asymptotic error from continuous time
# c++ in R ---------------------------------------------------------------------
sylcpp <- '
using Eigen::Map;
using Eigen::MatrixXd;
// Map the double …Run Code Online (Sandbox Code Playgroud)