Hi, I’m new to both Julia and JuMP. Experience in C#, Scala and I like functional programming. Would love some help to get in to Julia optimisation.
How do I compose functions or expressions in JuMP? I can make a trivial example that works for a one-variable problem as follows, with the expressions to compose in the middle. It’s the step after that where I get stuck.
using JuMP, Clp m = Model(Clp.Optimizer) # Data sourceMass_t = 1000.0 sourceGold_g = 600.0 # Fraction of each component taken @variable(m, 0.0 <= f <= 1.0) # Expressions to compose @expression(m, mass_t, f * sourceMass_t) @expression(m, gold_g, f * sourceGold_g) @expression(m, cost_USD, 15.0 * mass_t) @expression(m, recGold_TrOz, 0.90 / 31.1 * gold_g) @expression(m, rev_USD, 1800 * recGold_TrOz) # Net value objective @objective(m, Max, rev_USD - cost_USD) # Only constraint con = @constraint(m, mass_t <= 700) optimize!(m)
The next step to make that slightly more interesting is to have multiple data records, so data becomes something like:
sourceMass_t = [1000.0, 1500.0, 2000.0] sourceGold_g = [600.0, 700.0, 900.0]
and objective and constraint change to become sums:
con = @constraint(m, sum(mass_t) <= 2200) @objective(m, Max, sum(rev_USD) - sum(cost_USD))
The piece I’m missing is the ability to use the expressions composed already and apply to each pair of
sourceGold_g. i.e. a JuMP-friendly
map function, where each pair is given an associated
cost_USD. In pseudocode:
I don’t believe I should need to rewrite all the expressions to accept arrays of variables and manually iterate over them; the function graph doesn’t change.
The goal after that would be to have many many more functions to compose and many more
f fractions at different decision points, so I’m interested in the general approach here. Thanks.