Run time constraints in optimisation

This should give you some ideas

using DataFrames
using JuMP
using Clp

function generate_data()
    df = DataFrame(
        "SN" => (1:10),
        "Unique_ID"=> ["A","B","A","B","C","D","E","F","G","A"],
        "Sector" => ["Priv", "Gov", "Utl", "Priv","Priv","Gov","Utl","Priv","Priv","Gov"],
        "Values" => rand(20.0:140.0, 10),
    )
    return df
end

function build_model(c)
    model = Model(Clp.Optimizer)
    @variable(model, x[1:length(c)] >=0 )
    @objective(model, Min, sum(c[i] * x[i] for i = 1:length(c)))
    @constraint(model, con1, sum(x[i] for i = 1:length(c)) == 1)
    @constraint(model, con2, sum(c[i] * x[i] for i = 1:length(c)) >= 100)
    return model, x
end

function run_model(; fix_values = false)
    df = generate_data()
    model, x = build_model(df.Values)
    unique_keys = unique(df.Unique_ID)
    @variable(model, t[unique_keys])
    @constraint(model, [i = 1:length(x)], x[i] == t[df.Unique_ID[i]])
    if fix_values
        fix(x[1], 0.1; force = true)
    end
    optimize!(model)
    println("Results", JuMP.value.(x))
end
1 Like