标签: julia-jump

用线性/非线性回归拟合两条曲线

我需要用 JuMP 将两条曲线(都应该属于三次函数)拟合成一组点。

我已经完成了一条曲线的拟合,但我正在努力将 2 条曲线拟合到同一个数据集中。

我想,如果我可以将点分布到曲线上——所以如果每个点只能使用一次——我可以像下面那样做,但它没有用。(我知道我可以使用更复杂的东西,我想保持简单。)

这是我当前代码的一部分:

# cubicFunc is a two dimensional array which accepts cubicFunc[x,degree]

@variable(m, mult1[1:4]) // 0:3 because it's cubic
@variable(m, mult2[1:4]) // 0:3 because it's cubic

@variable(m, 0 <= includeIn1[1:numOfPoints] <= 1, Int)
@variable(m, 0 <= includeIn2[1:numOfPoints] <= 1, Int)

# some kind of hack to force one of them to 0 and other one to 1
@constraint(m, loop[i in 1:numOfPoints], includeIn1[i] + includeIn2[i] == 1)

@objective(m, Min, sum( (yPoints - cubicFunc*mult1).*includeIn1 .^2 ) …
Run Code Online (Sandbox Code Playgroud)

regression mathematical-optimization curve-fitting julia julia-jump

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

线性规划:找到所有最佳顶点

我想知道是否有一种很好的方法(最好使用JuMP)来获得线性程序的所有最优解(如果有多个最优解).

一个例子

最小化两个概率分布之间的统计距离(Kolmogorov距离).

min sum_{i=1}^{4} |P[i] - Q[i]| over free variable Q
P = [0.25,0.25,0.25,0.25]
sum_i P[i] = 1
Q[1] + Q[4] = 1
sum_i Q[i] = 1 -> Q[2],Q[3] = 0
Run Code Online (Sandbox Code Playgroud)

注意我们可以将优化表示为线性程序,目标就变成了

min S >= sum_i S[i]
S[i] >= P[i]-Q[i]
S[i] >= Q[i]-P[i]
Run Code Online (Sandbox Code Playgroud)

这个问题没有唯一的解决方案,而是跨越最优解的子空间

Q1 = [0.75,0,0,0.25]
Q2 = [0.25,0,0,0.75]
Run Code Online (Sandbox Code Playgroud)

两者都具有0.5的最小距离,这两种解决方案的任何凸组合都是最佳的.

我想知道是否有一种很好的方法可以找到所有这些最佳极值点(跨越最佳子空间的点)?

为什么我对此感兴趣; 给出最大Bhattacharyya系数(凹函数)的点位于静态距离的最佳子空间的中间.

到目前为止,我试图找到最佳的P,Q对(参考我给出的例子),使算法有利于通过在该项中增加1.001的权重来缩小P [i],Q [i]之间的距离.和.它似乎在某种程度上起作用,尽管我几乎无法确定.

linear-programming julia julia-jump

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

Matlab到Julia优化:JuMP中的函数@SetNLObjective

我正在尝试重写Julia中的Matlab fmincon优化函数.

这是Matlab代码:

function [x,fval] = example3()

  x0 = [0; 0; 0; 0; 0; 0; 0; 0];  
  A = [];                         
  b = [];
  Ae = [1000 1000 1000 1000 -1000 -1000 -1000 -1000];   
  be = [100];                     
  lb = [0; 0; 0; 0; 0; 0; 0; 0];  
  ub = [1; 1; 1; 1; 1; 1; 1; 1];  
  noncon = [];                  

  options = optimset('fmincon');
  options.Algorithm = 'interior-point';

  [x,fval] = fmincon(@objfcn,x0,A,b,Ae,be,lb,ub,@noncon,options);

end

function f = objfcn(x) 

  % user inputs
  Cr = [ 0.0064 …
Run Code Online (Sandbox Code Playgroud)

matlab mathematical-optimization julia julia-jump

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

如何使用JuMP向MIP请求第二个最佳解决方案

我有一个混合整数规划问题.我可以使用JuMP找到最佳解决方案.但我怎样才能找到第二个最佳解决方案?或者第三好等

这可能是另一个同样最优的解决方案,或者它可能是更糟糕的解决方案,或者可能是:Infeasible- 可能没有大多数解决方案.

我知道对于类似TSP的问题,我可以通过逐步删除最佳路径上的链接来找到其他解决方案(即将某些城市之间的距离设置为无限).对于调度类型问题,我可以类似地逐步设置禁止在最佳路径中使用的时隙的可用性.

但有没有一种通用的方法来做到这一点,而没有编写自己的问题特定的方法来禁止这个解决方案?

mathematical-optimization julia coin-or-cbc julia-jump mixed-integer-programming

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

加快Julia的包装负荷

我使用GLPKMathProgInterface和JuMP编写了一个程序来解决Julia中的线性程序.Julia代码由python程序调用,该程序通过多个命令行调用运行Juila代码的多个实例.虽然我对实际求解器的性能非常满意,但初始化非常慢.我想知道是否有办法加快这个速度.

例如,如果我只是将以下内容保存到文件中

@time using DataFrames, CSV, GLPKMathProgInterface, JuMP, ArgParse
Run Code Online (Sandbox Code Playgroud)

并运行它

mylabtop:~ me$ julia test.jl 
12.270137 seconds (6.54 M allocations: 364.537 MiB, 3.05% gc time)
Run Code Online (Sandbox Code Playgroud)

这看起来非常慢,是否有一些很好的方法来加速使用模块,比如我可以做一次的预编译步骤?

julia julia-jump

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

Julia JuMP 不可行问题 - 如何深入了解哪些约束导致问题不可行?

using JuMP, Cbc

model = Model(with_optimizer(Cbc.Optimizer, seconds= (20 * 60), ratioGap = 0.10));

@variable(model, x[1:5], Bin);

@constraint(model, c1[i in 1:4], x[i] == 0 )
@constraint(model, c2[i in 4:5], x[i] == 1 )

@objective(model, Min, sum(x[i] for i in 1:5))

JuMP.optimize!(model)
# Problem is infeasible - 0.00 seconds
Run Code Online (Sandbox Code Playgroud)

我如何获得约束 c1[4] 和 c2[4] 使问题不可行的信息?

c1[4] : x[4] = 0.0
c2[4] : x[4] = 1.0

julia-jump

6
推荐指数
0
解决办法
232
查看次数

稀疏矩阵的 JuMP?

如何处理JuMP中的稀疏矩阵?

例如,假设我想施加以下形式的约束:

A * x == 0
Run Code Online (Sandbox Code Playgroud)

其中A是稀疏矩阵和x变量向量。我认为A可以利用 的稀疏性来加快优化速度。我如何在 JuMP 中利用这一点?

julia julia-jump

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

在 Julia 中使用多线程创建 JuMP 模型

我有一个非常难以构建的优化模型。这个模型有很多 if-else 条件和很多循环。所以我在考虑使用多线程来构建这个单一的 JuMP 模型对象。

一个循环代码的非常简化的版本如下所示:

Threads.@threads for g in sets["A"]

    Array_1 = [gg for gg in [sets["B"];sets["A"]] if data2[gg] == g]
    Array_2 = [gg for gg in sets["B"] if data[gg] == g]

    for t in STAGES
        Array_3 = [gg for gg in [sets["B"];sets["A"]] if data2[gg] == g && (gg, t) in sets["C"] ]
        for b in BLOCKS
            name = @constraint( model, ((g, t, b) in sets["C"] ? X1[(g,t,b)] : 0)
            - sum(X1[(gg,t,b)] for gg in Array_3 )
            + X2[(g,t,b)] …
Run Code Online (Sandbox Code Playgroud)

optimization multithreading julia julia-jump

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

JuMP 中带有矢量化变量的用户定义(非线性)目标

是否可以在 JuMP for Julia 中将向量化变量与用户定义的目标函数一起使用?就像这样,

model = Model(GLPK.Optimizer)

A = [
    1 1 9 5
    3 5 0 8
    2 0 6 13
]

b = [7; 3; 5]

c = [1; 3; 5; 2]

@variable(model, x[1:4] >= 0)
@constraint(model, A * x .== b)

# dummy functions, could be nonlinear hypothetically
identity(x) = x
C(x, c) = c' * x

register(model, :identity, 1, identity; autodiff = true)
register(model, :C, 2, C; autodiff = true)
@NLobjective(model, Min, C(identity(x), c))
Run Code Online (Sandbox Code Playgroud)

这会引发错误, …

julia julia-jump

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

Julia Jump:获取 mip 的所有可行解决方案

我希望拥有所有可行(次优)向量,而不仅仅是 mip 的最佳解决方案向量。
\n我在这里发现了一些老问题,但我不确定它们是如何工作的。

\n

首先,是否有任何新的库工具/方法可以自动执行此操作?
\n我尝试了这个,但是什么也没做:

\n
if termination_status(m) == MOI.FEASIBLE_POINT\n    println(x)\nend\noptimize!(m);\n
Run Code Online (Sandbox Code Playgroud)\n

如果没有,最简单的方法是什么?
\n我想到扫描最优解,直到找到第一个非零决策变量,然后将该变量约束为零并再次求解模型。

\n
for i in 1:active_variables\n    if value.(z[i])==1\n        @constraint(m, x[i] == 0)\n        break\n    end\nend\n\noptimize!(m);\n
Run Code Online (Sandbox Code Playgroud)\n

但我用这个方法看到了这个问题**:

\n
    \n
  1. \xce\x99f 我将 x[i] 约束为零,在下一步中我可能希望再次删除此约束?这取决于是否可以存在两种(或更多)不同的解决方案,其中x[i]==1
  2. \n
\n
\n

optimization julia julia-jump mixed-integer-programming

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