<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mintoc.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=88.66.23.112</id>
	<title>mintOC - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mintoc.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=88.66.23.112"/>
	<link rel="alternate" type="text/html" href="https://mintoc.de/index.php?title=Special:Contributions/88.66.23.112"/>
	<updated>2026-06-09T11:38:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://mintoc.de/index.php?title=Lotka_Volterra_fishing_problem&amp;diff=66</id>
		<title>Lotka Volterra fishing problem</title>
		<link rel="alternate" type="text/html" href="https://mintoc.de/index.php?title=Lotka_Volterra_fishing_problem&amp;diff=66"/>
		<updated>2008-07-11T11:00:25Z</updated>

		<summary type="html">&lt;p&gt;88.66.23.112: Table ausprobiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dimensions&lt;br /&gt;
|nd        = 1&lt;br /&gt;
|nx        = 3&lt;br /&gt;
|nw        = 1&lt;br /&gt;
|nre       = 3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;10px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;80%&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Lotka Volterra fishing problem&#039;&#039;&#039; looks for an optimal fishing strategy to be performed on a fixed time horizon to bring the biomasses of both predator as prey fish to a prescribed steady state. The problem was set up as a small-scale benchmark problem. &lt;br /&gt;
The well known [http://en.wikipedia.org/wiki/Lotka_volterra Lotka Volterra equations] for a predator-prey system have been augmented by an additional linear term, relating to fishing by man. The control can be regarded both in a relaxed, as in a discrete manner, corresponding to a part of the fleet, or the full fishing fleet.&lt;br /&gt;
&lt;br /&gt;
It is thus an [http://en.wikipedia.org/wiki/Ordinary_differential_equation ODE] model with a single integer control function. The interior point equality conditions fix the initial values of the differential states.&lt;br /&gt;
&lt;br /&gt;
The optimal solution contains a singular arc, making the Lotka Volterra fishing problem an ideal candidate for benchmarking of algorithms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Do not edit between this comment and the next &#039;&amp;lt;td&amp;gt;&#039; tag! --&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mathematical formulation ==&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;math&amp;gt;t \in [t_0, t_f]&amp;lt;/math&amp;gt; almost everywhere the mixed-integer optimal control problem is given by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{llcl}&lt;br /&gt;
 \displaystyle \min_{x, w} &amp;amp; x_2(t_f)   \\[1.5ex]&lt;br /&gt;
 \mbox{s.t.} &amp;amp; \dot{x}_0(t) &amp;amp; = &amp;amp; x_0(t) - x_0(t) x_1(t) - \; c_0 x_0(t) \; w(t), \\&lt;br /&gt;
 &amp;amp; \dot{x}_1(t) &amp;amp; = &amp;amp; - x_1(t) + x_0(t) x_1(t) - \; c_1 x_1(t) \; w(t),  \\&lt;br /&gt;
 &amp;amp; \dot{x}_2(t) &amp;amp; = &amp;amp; (x_0(t) - 1)^2 + (x_1(t) - 1)^2,  \\[1.5ex]&lt;br /&gt;
 &amp;amp; x(0) &amp;amp;=&amp;amp; x_0, \\&lt;br /&gt;
 &amp;amp; w(t) &amp;amp;\in&amp;amp;  \{0, 1\}.&lt;br /&gt;
\end{array} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initial values and parameters ==&lt;br /&gt;
&lt;br /&gt;
These fixed values are used within the model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{rcl}&lt;br /&gt;
[t_0, t_f] &amp;amp;=&amp;amp; [0, 12],\\&lt;br /&gt;
(c_0, c_1) &amp;amp;=&amp;amp; (0.4, 0.2),\\&lt;br /&gt;
x_0 &amp;amp;=&amp;amp; (0.5, 0.7, 0)^T.&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference Solutions ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;text-align:center;padding-left:10px&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:lotkaindirektStates.png|thumb|340px|States]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;The two differential states and corresponding adjoint variables in the indirect approach&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
&lt;br /&gt;
The differential equations in C code:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
/* steady state with u == 0 */&lt;br /&gt;
double ref0 = 1, ref1 = 1;&lt;br /&gt;
&lt;br /&gt;
/* Biomass of prey */&lt;br /&gt;
rhs[0] =   xd[0] - xd[0]*xd[1] - p[0]*u[0]*xd[0];&lt;br /&gt;
/* Biomass of predator */&lt;br /&gt;
rhs[1] = - xd[1] + xd[0]*xd[1] - p[1]*u[0]*xd[1];&lt;br /&gt;
/* Deviation from reference trajectory */&lt;br /&gt;
rhs[2] = (xd[0]-ref0)*(xd[0]-ref0) + (xd[1]-ref1)*(xd[1]-ref1);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AMPL ===&lt;br /&gt;
&lt;br /&gt;
The model in AMPL code with a collocation method. We need a model file lotka_ampl.mod,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------&lt;br /&gt;
# Solve Lotka Volterra fishing problem via collocation&lt;br /&gt;
# ----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
param T    &amp;gt; 0;&lt;br /&gt;
param nt   &amp;gt; 0;&lt;br /&gt;
param c1   &amp;gt; 0;&lt;br /&gt;
param c2   &amp;gt; 0;&lt;br /&gt;
param ref1 &amp;gt; 0;&lt;br /&gt;
param ref2 &amp;gt; 0;&lt;br /&gt;
param dt := T / nt;&lt;br /&gt;
set I:= 0..nt-1;&lt;br /&gt;
&lt;br /&gt;
var x {I, 1..2} &amp;gt;= 0;&lt;br /&gt;
var w {I} binary;&lt;br /&gt;
&lt;br /&gt;
minimize Deviation:&lt;br /&gt;
   dt * sum {i in I} ( (x[i,1] - ref1)*(x[i,1] - ref1) &lt;br /&gt;
	                   + (x[i,2] - ref2)*(x[i,2] - ref2) ) ;&lt;br /&gt;
&lt;br /&gt;
subj to ODE_DISC_1 {i in I diff {0}}:&lt;br /&gt;
   x[i,1] = x[i-1,1] + dt * ( x[i-1,1] - x[i-1,1]*x[i-1,2] - x[i-1,1]*c1*w[i-1] );&lt;br /&gt;
	 &lt;br /&gt;
subj to ODE_DISC_2 {i in I diff {0}}:&lt;br /&gt;
   x[i,2] = x[i-1,2] + dt * ( - x[i-1,2] + x[i-1,1]*x[i-1,2] - x[i-1,2]*c2*w[i-1] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
a data file lotka_ampl.dat,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
# ------------------------------------&lt;br /&gt;
# Data: Lotka Volterra fishing problem&lt;br /&gt;
# ------------------------------------&lt;br /&gt;
&lt;br /&gt;
# Problem parameters&lt;br /&gt;
param T := 12.0;&lt;br /&gt;
param nt := 101;&lt;br /&gt;
param c1 := 0.4;&lt;br /&gt;
param c2 := 0.2;&lt;br /&gt;
param ref1 := 1.0;&lt;br /&gt;
param ref2 := 1.0;&lt;br /&gt;
&lt;br /&gt;
# Initial values differential states&lt;br /&gt;
let x[0,1] := 0.5;&lt;br /&gt;
let x[0,2] := 0.7;&lt;br /&gt;
fix x[0,1];&lt;br /&gt;
fix x[0,2];&lt;br /&gt;
&lt;br /&gt;
# Initial values control&lt;br /&gt;
let {i in I} w[i] := 0.0;&lt;br /&gt;
&lt;br /&gt;
param mysum;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and a running script lotka_ampl.run,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------&lt;br /&gt;
# Solve Lotka Volterra fishing problem via collocation&lt;br /&gt;
# ----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
model ampl_lotka.mod;&lt;br /&gt;
data ampl_lotka.dat;&lt;br /&gt;
&lt;br /&gt;
option solver bonmin;&lt;br /&gt;
&lt;br /&gt;
solve;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
The Lotka Volterra fishing problem was introduced by Sebastian Sager in a proceedings paper &amp;lt;bibref&amp;gt;Sager2006&amp;lt;/bibref&amp;gt; and revisited in his PhD thesis &amp;lt;bibref&amp;gt;Sager2005&amp;lt;/bibref&amp;gt;. These are also the references to look for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Testing Graphviz&lt;br /&gt;
&amp;lt;graphviz border=&#039;frame&#039; format=&#039;svg&#039;&amp;gt;&lt;br /&gt;
digraph G {Hello-&amp;gt;World!}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;bibreferences/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ODE Model]]&lt;/div&gt;</summary>
		<author><name>88.66.23.112</name></author>
	</entry>
</feed>