Hi all,
I have a question about the memory requirements of the following toy example, which is a simplified versions of my real problem:
using JuMP
using Ipopt
N = 29
p1 = rand(N+1,N+1,N+1)
p2 = rand(N+1,N+1,N+1)
p3 = rand(N+1,N+1,N+1)
h = 1.0/N
m = Model()
@variable(m, u1[1:(N+1),1:(N+1),1:(N+1)])
@variable(m, u2[1:(N+1),1:(N+1),1:(N+1)])
@NLobjective(m, Min, sum{ ( ( h * (30*u1[i,j,k]^2 - 20*u1[i,j,k]*u1[i,j+1,k] - 20*u1[i,j,k]*u1[i,j,k+1] - 10*u1[i+1,j,k]*u1[i,j+1,k] - 10*u1[i+1,j,k]*u1[i,j,k+1] - 10*u1[i,j+1,k]*u1[i,j,k+1] - 20*u2[i,j,k]*u2[i+1,j,k] - 20*u2[i,j,k]*u2[i,j+1,k] - 20*u2[i,j,k]*u2[i,j,k+1] - 10*u2[i+1,j,k]*u2[i,j+1,k] - 10*u2[i+1,j,k]*u2[i,j,k+1] - 10*u2[i,j+1,k]*u2[i,j,k+1] - 20*u1[i+1,j,k]*u1[i+1,j+1,k] - 20*u1[i+1,j,k]*u1[i+1,j,k+1] - 20*u1[i,j+1,k]*u1[i+1,j+1,k] - 20*u1[i,j+1,k]*u1[i,j+1,k+1] - 20*u1[i,j,k+1]*u1[i+1,j,k+1] - 20*u1[i,j,k+1]*u1[i,j+1,k+1] - 20*u2[i+1,j,k]*u2[i+1,j+1,k] - 20*u2[i+1,j,k]*u2[i+1,j,k+1] - 20*u2[i,j+1,k]*u2[i+1,j+1,k] - 20*u2[i,j+1,k]*u2[i,j+1,k+1] - 20*u2[i,j,k+1]*u2[i+1,j,k+1] + 5*p2[i,j,k]*u2[i,j+1,k]*u1[i,j+1,k+1] - 5*p2[i,j,k]*u2[i,j,k+1]*u1[i+1,j,k+1] + 10*p2[i,j,k]*u2[i,j,k+1]*u1[i,j+1,k+1] - 5*p3[i,j,k]*u2[i+1,j,k]*u1[i+1,j+1,k] - 10*p3[i,j,k]*u2[i+1,j,k]*u1[i+1,j,k+1] - 5*p3[i,j,k]*u2[i,j+1,k]*u1[i+1,j+1,k] + 10*p3[i,j,k]*u2[i,j+1,k]*u1[i,j+1,k+1] - 5*p3[i,j,k]*u2[i,j,k+1]*u1[i+1,j,k+1] + 5*p3[i,j,k]*u2[i,j,k+1]*u1[i,j+1,k+1] - 5*p1[i,j,k]*u1[i+1,j,k]*u2[i+1,j+1,k] - 5*p1[i,j,k]*u1[i+1,j,k]*u2[i+1,j,k+1] - 10*p1[i,j,k]*u1[i,j+1,k]*u2[i+1,j+1,k] + 5*p1[i,j,k]*u1[i,j+1,k]*u2[i,j+1,k+1] - 10*p1[i,j,k]*u1[i,j,k+1]*u2[i+1,j,k+1] + 5*p1[i,j,k]*u1[i,j,k+1]*u2[i,j+1,k+1] - 10*p2[i,j,k]*u1[i+1,j,k]*u2[i+1,j+1,k] + 5*p2[i,j,k]*u1[i+1,j,k]*u2[i+1,j,k+1] - 5*p2[i,j,k]*u1[i,j+1,k]*u2[i+1,j+1,k] - 5*p2[i,j,k]*u1[i,j+1,k]*u2[i,j+1,k+1] + 5*p2[i,j,k]*u1[i,j,k+1]*u2[i+1,j,k+1] - 10*p2[i,j,k]*u1[i,j,k+1]*u2[i,j+1,k+1] + 5*p3[i,j,k]*u1[i+1,j,k]*u2[i+1,j+1,k] + 10*p3[i,j,k]*u1[i+1,j,k]*u2[i+1,j,k+1] + 5*p3[i,j,k]*u1[i,j+1,k]*u2[i+1,j+1,k] - 10*p3[i,j,k]*u1[i,j+1,k]*u2[i,j+1,k+1] + 5*p3[i,j,k]*u1[i,j,k+1]*u2[i+1,j,k+1] - 5*p3[i,j,k]*u1[i,j,k+1]*u2[i,j+1,k+1] + 20*p1[i,j,k]*u2[i,j+1,k]*u1[i+1,j+1,k+1] + 20*p1[i,j,k]*u2[i,j,k+1]*u1[i+1,j+1,k+1] + 20*p2[i,j,k]*u2[i+1,j,k]*u1[i+1,j+1,k+1] + 20*p2[i,j,k]*u2[i,j,k+1]*u1[i+1,j+1,k+1] + 10*p3[i,j,k]*u2[i+1,j,k]*u1[i+1,j+1,k+1] + 20*p3[i,j,k]*u2[i,j+1,k]*u1[i+1,j+1,k+1] - 5*p1[i,j,k]*u2[i+1,j+1,k]*u1[i+1,j+1,k+1] - 5*p1[i,j,k]*u2[i+1,j,k+1]*u1[i+1,j+1,k+1] + 10*p1[i,j,k]*u2[i,j+1,k+1]*u1[i+1,j+1,k+1] - 5*p2[i,j,k]*u2[i+1,j+1,k]*u1[i+1,j+1,k+1] + 10*p2[i,j,k]*u2[i+1,j,k+1]*u1[i+1,j+1,k+1] - 5*p2[i,j,k]*u2[i,j+1,k+1]*u1[i+1,j+1,k+1] + 10*p3[i,j,k]*u2[i+1,j+1,k]*u1[i+1,j+1,k+1] + 5*p3[i,j,k]*u2[i+1,j,k+1]*u1[i+1,j+1,k+1] - 5*p3[i,j,k]*u2[i,j+1,k+1]*u1[i+1,j+1,k+1] - 20*p1[i,j,k]*u1[i,j+1,k]*u2[i+1,j+1,k+1] - 20*p1[i,j,k]*u1[i,j,k+1]*u2[i+1,j+1,k+1] - 20*p2[i,j,k]*u1[i+1,j,k]*u2[i+1,j+1,k+1] - 20*p2[i,j,k]*u1[i,j,k+1]*u2[i+1,j+1,k+1] - 10*p3[i,j,k]*u1[i+1,j,k]*u2[i+1,j+1,k+1] - 20*p3[i,j,k]*u1[i,j+1,k]*u2[i+1,j+1,k+1] + 5*p1[i,j,k]*u1[i+1,j+1,k]*u2[i+1,j+1,k+1] + 5*p1[i,j,k]*u1[i+1,j,k+1]*u2[i+1,j+1,k+1] - 10*p1[i,j,k]*u1[i,j+1,k+1]*u2[i+1,j+1,k+1] + 5*p2[i,j,k]*u1[i+1,j+1,k]*u2[i+1,j+1,k+1] - 10*p2[i,j,k]*u1[i+1,j,k+1]*u2[i+1,j+1,k+1] + 5*p2[i,j,k]*u1[i,j+1,k+1]*u2[i+1,j+1,k+1] - 10*p3[i,j,k]*u1[i+1,j+1,k]*u2[i+1,j+1,k+1] - 5*p3[i,j,k]*u1[i+1,j,k+1]*u2[i+1,j+1,k+1] + 5*p3[i,j,k]*u1[i,j+1,k+1]*u2[i+1,j+1,k+1]) + h^3 * (p1[i,j,k]^2*u1[i,j,k]*u1[i+1,j,k] + p1[i,j,k]^2*u1[i,j,k]*u1[i,j+1,k] + p1[i,j,k]^2*u1[i,j,k]*u1[i,j,k+1] + p2[i,j,k]^2*u1[i,j,k]*u1[i+1,j,k] + p2[i,j,k]^2*u1[i,j,k]*u1[i,j+1,k] + p2[i,j,k]^2*u1[i,j,k]*u1[i,j,k+1] + p3[i,j,k]^2*u1[i,j,k]*u1[i+1,j,k] + p3[i,j,k]^2*u1[i,j,k]*u1[i,j+1,k] + p3[i,j,k]^2*u1[i,j,k]*u1[i,j,k+1] + 4*p1[i,j,k]^2*u1[i+1,j,k]*u1[i,j+1,k] + 4*p1[i,j,k]^2*u1[i+1,j,k]*u1[i,j,k+1] + 4*p1[i,j,k]^2*u1[i,j+1,k]*u1[i,j,k+1] + p1[i,j,k]^2*u2[i,j,k]*u2[i+1,j,k] + p1[i,j,k]^2*u2[i,j,k]*u2[i,j+1,k] + p1[i,j,k]^2*u2[i,j,k]*u2[i,j,k+1] + 4*p2[i,j,k]^2*u1[i+1,j,k]*u1[i,j+1,k] + 4*p2[i,j,k]^2*u1[i+1,j,k]*u1[i,j,k+1] + 4*p2[i,j,k]^2*u1[i,j+1,k]*u1[i,j,k+1] + p2[i,j,k]^2*u2[i,j,k]*u2[i+1,j,k] + p2[i,j,k]^2*u2[i,j,k]*u2[i,j+1,k] + p2[i,j,k]^2*u2[i,j,k]*u2[i,j,k+1] + 4*p3[i,j,k]^2*u1[i+1,j,k]*u1[i,j+1,k] + 4*p3[i,j,k]^2*u1[i+1,j,k]*u1[i,j,k+1] + 4*p3[i,j,k]^2*u1[i,j+1,k]*u1[i,j,k+1] + p3[i,j,k]^2*u2[i,j,k]*u2[i+1,j,k] + p3[i,j,k]^2*u2[i,j,k]*u2[i,j+1,k] + p3[i,j,k]^2*u2[i,j,k]*u2[i,j,k+1] + 4*p1[i,j,k]^2*u2[i+1,j,k]*u2[i,j+1,k] + p3[i,j,k]^2*u2[i,j+1,k+1]*u2[i+1,j+1,k+1]))/(60) )
, i=1:N, j=1:N, k=1:N})
solve(m)
Running this in Julia results in a >4GB memory usage, which I suppose is because of the long objective function. Am I doing something wrong or is it common? In the second case is there a clever strategy to reduce this high memory usage?
Indeed my real objective function is 10 times longer than the one above, and so I run out of RAM very quickly even for small values of N…