<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mintoc.de/index.php?action=history&amp;feed=atom&amp;title=Lotka_Volterra_fishing_problem_%28Casadi%29</id>
	<title>Lotka Volterra fishing problem (Casadi) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mintoc.de/index.php?action=history&amp;feed=atom&amp;title=Lotka_Volterra_fishing_problem_%28Casadi%29"/>
	<link rel="alternate" type="text/html" href="https://mintoc.de/index.php?title=Lotka_Volterra_fishing_problem_(Casadi)&amp;action=history"/>
	<updated>2026-06-09T08:07:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://mintoc.de/index.php?title=Lotka_Volterra_fishing_problem_(Casadi)&amp;diff=1348&amp;oldid=prev</id>
		<title>MirkoHahn: Created page with &quot;This page contains a discretized version of the MIOCP Lotka Volterra fishing problem in [http://www.casadi.org Casadi] format.  === Casadi ===  The model in Python code fo...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mintoc.de/index.php?title=Lotka_Volterra_fishing_problem_(Casadi)&amp;diff=1348&amp;oldid=prev"/>
		<updated>2016-01-19T17:59:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;This page contains a discretized version of the MIOCP &lt;a href=&quot;/index.php?title=Lotka_Volterra_fishing_problem&quot; title=&quot;Lotka Volterra fishing problem&quot;&gt;Lotka Volterra fishing problem&lt;/a&gt; in [http://www.casadi.org Casadi] format.  === Casadi ===  The model in Python code fo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This page contains a discretized version of the MIOCP [[Lotka Volterra fishing problem]] in [http://www.casadi.org Casadi] format.&lt;br /&gt;
&lt;br /&gt;
=== Casadi ===&lt;br /&gt;
&lt;br /&gt;
The model in Python code for a fixed control discretization grid using direct multiple shooting.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# ------------------------------------------------------------------------------&lt;br /&gt;
# Lotka Volterra fishing problem with CasADi Python interface using direct&lt;br /&gt;
# multiple shooting with IPOPT and Sundials&amp;#039; integrator CVodes&lt;br /&gt;
#&lt;br /&gt;
# NOTE: CasADi currently has no support for mixed-integer problems. Only the&lt;br /&gt;
# relaxed solution is calculated&lt;br /&gt;
# ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# Import&lt;br /&gt;
from casadi import *&lt;br /&gt;
&lt;br /&gt;
# Introduce model parameters&lt;br /&gt;
t0 =  0&lt;br /&gt;
tf = 12&lt;br /&gt;
c0 =  0.4&lt;br /&gt;
c1 =  0.2&lt;br /&gt;
x0 = [0.5, 0.7, 0]&lt;br /&gt;
&lt;br /&gt;
# Define length of time horizon as well as number and length of intervals&lt;br /&gt;
T  = tf - t0&lt;br /&gt;
N  = 100&lt;br /&gt;
dt = float(T) / N&lt;br /&gt;
&lt;br /&gt;
# Define the DAE&lt;br /&gt;
x = SX.sym(&amp;#039;x&amp;#039;, 3)&lt;br /&gt;
w = SX.sym(&amp;#039;w&amp;#039;)&lt;br /&gt;
rhs = vertcat([&lt;br /&gt;
    dt * ( x[0] - x[0] * x[1] - c0 * x[0] * w),&lt;br /&gt;
    dt * (-x[1] + x[0] * x[1] - c1 * x[1] * w),&lt;br /&gt;
    dt * ((x[0] - 1)**2 + (x[1] - 1)**2)&lt;br /&gt;
])&lt;br /&gt;
dae = SXFunction(&amp;quot;dae&amp;quot;, daeIn(x=x, p=w), daeOut(ode=rhs))&lt;br /&gt;
&lt;br /&gt;
I_opt = {&lt;br /&gt;
    &amp;#039;linear_solver&amp;#039;: &amp;#039;csparse&amp;#039;,&lt;br /&gt;
    &amp;#039;t0&amp;#039;:             0.0,&lt;br /&gt;
    &amp;#039;tf&amp;#039;:             1.0&lt;br /&gt;
}&lt;br /&gt;
I = Integrator(&amp;quot;integrate&amp;quot;, &amp;quot;cvodes&amp;quot;, dae, I_opt)&lt;br /&gt;
&lt;br /&gt;
# Define number of state variables, controls and variables per interval&lt;br /&gt;
nx = x.size1()  # Number of states&lt;br /&gt;
nu = w.size1()  # Number of controls&lt;br /&gt;
ns = nx + nu    # Number of variables per shooting interval&lt;br /&gt;
&lt;br /&gt;
# Create symbolic expressions for actual NLP variables and define DMS structure&lt;br /&gt;
X = MX.sym(&amp;#039;X&amp;#039;, (N + 1) * nx + N * nu)            # Optimization variables&lt;br /&gt;
G = []                                            # Nonlinear constraints&lt;br /&gt;
F = X[N*ns+2]                                     # Mayer objective&lt;br /&gt;
for i in range(0, N):&lt;br /&gt;
    X0 = X[i*ns:i*ns+nx]                          # Initial state for interval&lt;br /&gt;
    U  = X[i*ns+nx:(i+1)*ns]                      # Control for interval&lt;br /&gt;
    X1 = X[(i+1)*ns:(i+1)*ns+nx]                  # Terminal state for interval&lt;br /&gt;
&lt;br /&gt;
    Y = I({&amp;#039;x0&amp;#039;: X0, &amp;#039;p&amp;#039;: U})&lt;br /&gt;
    G = vertcat([G, Y[&amp;#039;xf&amp;#039;] - X1])&lt;br /&gt;
&lt;br /&gt;
# Define NLP&lt;br /&gt;
nlp = MXFunction(&amp;#039;nlp&amp;#039;, nlpIn(x=X), nlpOut(f=F, g=G))&lt;br /&gt;
&lt;br /&gt;
# Create feasible initial solution by simulating with constant zero control&lt;br /&gt;
Xstart = DMatrix.zeros(X.size1(), X.size2())&lt;br /&gt;
Xstart[0:nx] = x0&lt;br /&gt;
for i in range(0, N):&lt;br /&gt;
    X0 = Xstart[i*ns:i*ns+nx]&lt;br /&gt;
    Xstart[i*ns+nx:(i+1)*ns]     = 0.0&lt;br /&gt;
    Xstart[(i+1)*ns:(i+1)*ns+nx] = I({&amp;#039;x0&amp;#039;: X0, &amp;#039;p&amp;#039;: 0.0})[&amp;#039;xf&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
# Create and execute nonlinear solver&lt;br /&gt;
solver = NlpSolver(&amp;#039;solver&amp;#039;, &amp;#039;ipopt&amp;#039;, nlp)&lt;br /&gt;
result = solver({&lt;br /&gt;
    &amp;#039;x0&amp;#039;:  Xstart,&lt;br /&gt;
    &amp;#039;lbg&amp;#039;: DMatrix.zeros(G.size1()),&lt;br /&gt;
    &amp;#039;ubg&amp;#039;: DMatrix.zeros(G.size1()),&lt;br /&gt;
    &amp;#039;lbx&amp;#039;: x0 + [0.0] + [0.0, 0.0, 0.0, 0.0] * (N - 1) + [0.0, 0.0, 0.0],&lt;br /&gt;
    &amp;#039;ubx&amp;#039;: x0 + [1.0] + [inf, inf, inf, 1.0] * (N - 1) + [inf, inf, inf]&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Extract solution and objective&lt;br /&gt;
x = result[&amp;#039;x&amp;#039;]&lt;br /&gt;
f = result[&amp;#039;f&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
# Disassemble solution into easily plottable lists&lt;br /&gt;
t  = [i*dt       for i in range(0, N + 1)]&lt;br /&gt;
x0 = [x[i*ns]    for i in range(0, N + 1)]&lt;br /&gt;
x1 = [x[i*ns+1]  for i in range(0, N + 1)]&lt;br /&gt;
u  = [x[i*ns+nx] for i in range(0, N    )]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
=== IPOPT ===&lt;br /&gt;
The relaxed solution calculated by IPOPT (Ipopt 3.12, Linux x86_64, default settings, 4 GHz quadcore, Linux 4.2.0-23-generic) has an objective function value of &amp;lt;math&amp;gt;x_2(t_f) = 1.34428&amp;lt;/math&amp;gt;. IPOPT requires 22 iterations (6.062 seconds of processing time). The following is a Gnuplot compatible tabular version of the solution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#         t,         x_0,         x_1,           u&lt;br /&gt;
          0,         0.5,         0.7, 5.18436e-09&lt;br /&gt;
       0.12,    0.519594,    0.659989, 5.42459e-09&lt;br /&gt;
       0.24,    0.542429,    0.623852, 5.79496e-09&lt;br /&gt;
       0.36,    0.568601,    0.591429, 6.30563e-09&lt;br /&gt;
       0.48,     0.59823,    0.562571, 6.97415e-09&lt;br /&gt;
        0.6,    0.631456,    0.537143,   7.827e-09&lt;br /&gt;
       0.72,     0.66843,    0.515028, 8.90236e-09&lt;br /&gt;
       0.84,    0.709312,    0.496134, 1.02545e-08&lt;br /&gt;
       0.96,     0.75426,    0.480401, 1.19611e-08&lt;br /&gt;
       1.08,    0.803421,      0.4678, 1.41346e-08&lt;br /&gt;
        1.2,    0.856919,    0.458344, 1.69417e-08&lt;br /&gt;
       1.32,    0.914842,    0.452091, 2.06377e-08&lt;br /&gt;
       1.44,     0.97722,    0.449154, 2.56285e-08&lt;br /&gt;
       1.56,       1.044,    0.449708,  3.2592e-08&lt;br /&gt;
       1.68,     1.11503,    0.454003, 4.27322e-08&lt;br /&gt;
        1.8,     1.18998,    0.462372, 5.83658e-08&lt;br /&gt;
       1.92,     1.26837,    0.475251, 8.44574e-08&lt;br /&gt;
       2.04,     1.34942,    0.493189, 1.33425e-07&lt;br /&gt;
       2.16,     1.43209,    0.516862, 2.44977e-07&lt;br /&gt;
       2.28,     1.51492,    0.547087, 6.24464e-07&lt;br /&gt;
        2.4,     1.59605,    0.584816,    0.715281&lt;br /&gt;
       2.52,     1.61776,     0.61833,    0.999999&lt;br /&gt;
       2.64,     1.61116,      0.6499,    0.999999&lt;br /&gt;
       2.76,     1.59844,     0.68229,           1&lt;br /&gt;
       2.88,     1.57963,    0.714939,           1&lt;br /&gt;
          3,     1.55497,    0.747196,           1&lt;br /&gt;
       3.12,     1.52487,    0.778343,    0.999999&lt;br /&gt;
       3.24,     1.48993,    0.807625,    0.999999&lt;br /&gt;
       3.36,      1.4509,     0.83429,    0.999999&lt;br /&gt;
       3.48,     1.40865,    0.857635,    0.999998&lt;br /&gt;
        3.6,     1.36412,    0.877047,    0.999997&lt;br /&gt;
       3.72,     1.31827,    0.892039,    0.999991&lt;br /&gt;
       3.84,     1.27203,     0.90228,    0.999646&lt;br /&gt;
       3.96,     1.22628,    0.907616,    0.536112&lt;br /&gt;
       4.08,     1.20755,    0.919653,    0.581667&lt;br /&gt;
        4.2,     1.18502,    0.928525,    0.503883&lt;br /&gt;
       4.32,     1.16606,    0.936899,    0.464153&lt;br /&gt;
       4.44,     1.14851,    0.944178,    0.418428&lt;br /&gt;
       4.56,     1.13278,    0.950658,    0.378617&lt;br /&gt;
       4.68,     1.11859,    0.956378,    0.341493&lt;br /&gt;
        4.8,     1.10582,    0.961433,      0.3073&lt;br /&gt;
       4.92,     1.09438,    0.965904,    0.276462&lt;br /&gt;
       5.04,     1.08411,    0.969849,    0.248219&lt;br /&gt;
       5.16,     1.07492,    0.973333,    0.222481&lt;br /&gt;
       5.28,      1.0667,    0.976412,     0.19935&lt;br /&gt;
        5.4,     1.05936,     0.97913,    0.178262&lt;br /&gt;
       5.52,      1.0528,    0.981533,    0.159402&lt;br /&gt;
       5.64,     1.04696,    0.983656,    0.142349&lt;br /&gt;
       5.76,     1.04175,    0.985532,    0.127041&lt;br /&gt;
       5.88,      1.0371,    0.987191,      0.1133&lt;br /&gt;
          6,     1.03297,    0.988657,    0.100985&lt;br /&gt;
       6.12,     1.02929,    0.989954,   0.0899604&lt;br /&gt;
       6.24,     1.02601,    0.991101,   0.0800981&lt;br /&gt;
       6.36,      1.0231,    0.992117,   0.0712934&lt;br /&gt;
       6.48,     1.02051,    0.993015,   0.0634308&lt;br /&gt;
        6.6,     1.01821,    0.993811,   0.0564127&lt;br /&gt;
       6.72,     1.01617,    0.994515,   0.0501573&lt;br /&gt;
       6.84,     1.01435,    0.995139,   0.0445824&lt;br /&gt;
       6.96,     1.01274,    0.995691,   0.0396177&lt;br /&gt;
       7.08,     1.01131,     0.99618,   0.0351979&lt;br /&gt;
        7.2,     1.01003,    0.996613,   0.0312714&lt;br /&gt;
       7.32,      1.0089,    0.996997,    0.027765&lt;br /&gt;
       7.44,      1.0079,    0.997337,   0.0246626&lt;br /&gt;
       7.56,     1.00701,    0.997639,   0.0218975&lt;br /&gt;
       7.68,     1.00622,    0.997905,   0.0194423&lt;br /&gt;
        7.8,     1.00552,    0.998142,   0.0172603&lt;br /&gt;
       7.92,      1.0049,    0.998351,   0.0153224&lt;br /&gt;
       8.04,     1.00435,    0.998537,   0.0136015&lt;br /&gt;
       8.16,     1.00386,    0.998701,   0.0120735&lt;br /&gt;
       8.28,     1.00342,    0.998847,   0.0107171&lt;br /&gt;
        8.4,     1.00303,    0.998976,  0.00951328&lt;br /&gt;
       8.52,     1.00269,     0.99909,  0.00844491&lt;br /&gt;
       8.64,     1.00239,    0.999191,  0.00749702&lt;br /&gt;
       8.76,     1.00212,    0.999281,  0.00665598&lt;br /&gt;
       8.88,     1.00188,     0.99936,  0.00590975&lt;br /&gt;
          9,     1.00167,     0.99943,  0.00524776&lt;br /&gt;
       9.12,     1.00148,    0.999492,  0.00466052&lt;br /&gt;
       9.24,     1.00131,    0.999547,  0.00413914&lt;br /&gt;
       9.36,     1.00117,    0.999596,  0.00367206&lt;br /&gt;
       9.48,     1.00103,    0.999637,  0.00326159&lt;br /&gt;
        9.6,     1.00092,    0.999675,  0.00290302&lt;br /&gt;
       9.72,     1.00082,    0.999707,  0.00258504&lt;br /&gt;
       9.84,     1.00072,    0.999736,  0.00230262&lt;br /&gt;
       9.96,     1.00064,    0.999762,  0.00205186&lt;br /&gt;
      10.08,     1.00057,    0.999785,  0.00182951&lt;br /&gt;
       10.2,     1.00051,    0.999805,  0.00163302&lt;br /&gt;
      10.32,     1.00045,    0.999822,  0.00146039&lt;br /&gt;
      10.44,      1.0004,    0.999838,  0.00131011&lt;br /&gt;
      10.56,     1.00036,    0.999851,  0.00118097&lt;br /&gt;
      10.68,     1.00032,    0.999863,  0.00107188&lt;br /&gt;
       10.8,     1.00028,    0.999872, 0.000981659&lt;br /&gt;
      10.92,     1.00025,     0.99988,  0.00090944&lt;br /&gt;
      11.04,     1.00022,    0.999886, 0.000854893&lt;br /&gt;
      11.16,     1.00019,     0.99989, 0.000818284&lt;br /&gt;
      11.28,     1.00017,    0.999892, 0.000801181&lt;br /&gt;
       11.4,     1.00014,    0.999891, 0.000807844&lt;br /&gt;
      11.52,     1.00012,    0.999886, 0.000848734&lt;br /&gt;
      11.64,     1.00009,    0.999878, 0.000951928&lt;br /&gt;
      11.76,     1.00006,    0.999864,  0.00121852&lt;br /&gt;
      11.88,     1.00002,    0.999838,  0.00267036&lt;br /&gt;
         12,    0.999915,    0.999769,           0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:Casadi]]&lt;/div&gt;</summary>
		<author><name>MirkoHahn</name></author>
	</entry>
</feed>