Differential equation system in Optimization Toolbox
Show older comments
Hi, everyone.
I'm trying to solve dynamic programming problem. I have differential equation system like that one:
dydt = zeros(2,1);
dydt(1) = z(1);
dydt(2) = z(2)-z(1);
With constraints:
z>=0;
z(1)+z(2)<=x(2);
z(2)<=x(1);
x(2)>=0;
I must maximize x(2) on period T=5.
How can I optimize DES and find z with Optimization Toolbox?
Thank you.
8 Comments
Walter Roberson
on 30 Apr 2012
Crosscheck here: does z>=0 mean z(1) >= 0 and z(2) >= 0 ?
Artyom
on 30 Apr 2012
Walter Roberson
on 30 Apr 2012
Which of the values are unknowns? Are z or x intended to be interpreted as being time-dependent, z1(t) ?
If you must maximize x(2) then why not just say x(2) = infinity ?
Artyom
on 30 Apr 2012
Richard Brown
on 30 Apr 2012
I'm also confused - how do the values of z change over time? Is this a continuous or discrete time problem?
Artyom
on 30 Apr 2012
Richard Brown
on 30 Apr 2012
Are the z variables constrained to take on integer values?
Artyom
on 30 Apr 2012
Answers (1)
Richard Brown
on 1 May 2012
Your problem is a linear program in the arrays x1, x2, z1, z2. Because the RHS of the ODEs is piecewise constant, the problem can be reformulated as a series of difference equations. You therefore have the following linear equality constraints:
k = 0, ..., 4:
x1[k+1] = x1[k] + z1[k]
x2[k+1] = x2[k] + z2[k] - z1[k]
where x1[0] and x2[0] are known initial conditions
And you have the following linear inequality constraints:
k = 0, ..., 4:
z1[k] >= 0
z2[k] >= 0
z1[k] + z2[k] <= x2[k]
z2[k] <= x1[k]
z2[k] - z1[k] >= -x2[k]
Your cost is also linear:
c(z1, z2, x1, x2) = x2[5]
All of this defines a linear program that you can solve with linprog. All you require is a little bookkeeping to formulate the constraint matrices (and conversion to ones-based indexing)
Categories
Find more on Quadratic Programming and Cone Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!