optimization - 约束数组 Julia

标签 optimization julia mathematical-optimization julia-jump ijulia-notebook

我试图获得一系列约束,但我不断收到不同类型的错误,而且我不知道我做错了什么。

数据数组为 77x9(整数值)

foods是一个大小为77x1的列向量,数组类型的变量

lower是一个9x1的列向量,一个整数向量

我应该有 9 个限制

这是我所拥有的,

model2 = Model()
@variable(model2, foods[i=1:77] >= 0)  # Quantity of food

 for i ∈ 1:9
 for j ∈ 1:77
 @constraint(model2, c2[i], sum(data[j][i]*foods[j])<=lower[i])
 end 
 end

最佳答案

你想做的是

@constraint(model2, data' * foods .<= lower)

说明

让我们做一个玩具示例:

julia> @variable(model2, foods[i=1:3] >= 0)
3-element Vector{VariableRef}:
 foods[1]
 foods[2]
 foods[3]

julia> data = collect(reshape(1:12, 3, 4))
3×4 Matrix{Int64}:
 1  4  7  10
 2  5  8  11
 3  6  9  12

julia> lower = rand(101:104, 4)
4-element Vector{Int64}:
 104
 102
 102
 102

对于这种情况,您可以仅使用矩阵乘法:

julia> data' * foods
4-element Vector{AffExpr}:
 foods[1] + 2 foods[2] + 3 foods[3]
 4 foods[1] + 5 foods[2] + 6 foods[3]
 7 foods[1] + 8 foods[2] + 9 foods[3]
 10 foods[1] + 11 foods[2] + 12 foods[3]

现在添加右侧约束(请注意,我们对 <= 运算符进行了矢量化:

julia> @constraint(model2, data' * foods .<= lower)
4-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:
 foods[1] + 2 foods[2] + 3 foods[3] <= 104.0
 4 foods[1] + 5 foods[2] + 6 foods[3] <= 102.0
 7 foods[1] + 8 foods[2] + 9 foods[3] <= 102.0
 10 foods[1] + 11 foods[2] + 12 foods[3] <= 102.0

关于optimization - 约束数组 Julia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71038668/

相关文章:

Python搜索大列表速度

javascript - 如何在REST中有效地更新复杂的大对象?

algorithm - 这个优化算法的正式名称?

javascript - 让 JavaScript 加载更多数字?

julia - 方法错误 : no method matching in user defined function

c# - 斐波那契 LFSR 计算优化

c++ - 转换 C++ 层次结构以使用静态多态性

php - 与 C 相比,循环/赋值速度变慢的原因是什么?

julia - 用来计算组合(n选择k)的Julia函数是什么?

python - Julia 字符串格式 "if"