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