我用 Optimization.jl 解一个简单的 线性规划问题, 但是结果不对, 不知道哪里写错了.
using Optimization
using OptimizationOptimJL
using OptimizationMOI
# using Clp
function test1()
# book\数据建模\0课件集合\3数学规划\数学规划建模.ppx 例1 运输问题
t1(u,p) = p[1]*u[1] + p[2]*u[2] + p[3]*u[3] + p[4]*u[4] + p[5]*u[5] + p[6]*u[6]
u0 = [1.0,1,1,1,3,4] # zeros(Float64, 6) # 变量初始值
p = [12.0,24.0,8.0,30.0,12.0,24.0] # 参数初始值
# 约束条件
inf = Inf # 10000.0
cons = (x,p) -> [x[1] + x[2] + x[3], x[4] + x[5] + x[6],
x[1] + x[4], x[2] + x[5], x[3] + x[6]] # 约束表达式 数组
lcons = [0.0,0.0,2.0,4.0,5.0] # 约束下限 数组
ucons = [4.0,8.0,inf,inf,inf] # 约束上限 数组
lb = [0.0,0,0,0,0,0] # 限制变量x下限
ub = [inf,inf,inf,inf,inf,inf] # 限制变量x上限
optf = OptimizationFunction(t1, Optimization.AutoForwardDiff(); cons=cons)
prob = OptimizationProblem(optf, u0, p; lb=lb, ub=ub, lcons=lcons, ucons=ucons)
# Import a solver package and solve the optimization problem
sol = solve(prob, BFGS()) # SAMIN BFGS NelderMead Clp.Optimizer
println(sol)
println(sol.original)
end
test1()
结果:
retcode: false
u: [Inf, Inf, Inf, Inf, Inf, Inf]
Final objective value: Inf
* Status: failure
* Candidate solution
Final objective value: Inf
* Found with
Algorithm: Fminbox with BFGS
* Convergence measures
|x - x'| = NaN ≰ 0.0e+00
|x - x'|/|x'| = NaN ≰ 0.0e+00
|f(x) - f(x')| = NaN ≰ 0.0e+00
|f(x) - f(x')|/|f(x')| = NaN ≰ 0.0e+00
|g(x)| = NaN ≰ 1.0e-08
* Work counters
Seconds run: 1 (vs limit Inf)
Iterations: 1000
f(x) calls: 1
∇f(x) calls: 1
这结果不对, 不知道哪里问题