Lotka Volterra fishing problem (TomDyn/PROPT)
From mintOC
Revision as of 16:48, 19 January 2016 by MaxWolff (Talk | contribs) (Created page with "<source lang="matlab"> %% Lotka-Volterra fishing example % % Implemented by: Maximilian von Wolff % % %% Problem Description % % As on https://modest.math.uni-magdeburg.de/mi...")
%% Lotka-Volterra fishing example % % Implemented by: Maximilian von Wolff % % %% Problem Description % % As on https://modest.math.uni-magdeburg.de/mintoc/index.php/Lotka_Volterra_fishing_problem % % \min\limits_{x,u} x_3(t_f) % % subject to: % % dot(x)_1(t) = x_1(t) - x_1(t)*x_2(t) - c_0*x_1(t)*u(t), % dot(x)_2(t) = -x_2(t) + x_1(t)*x_2(t) - c_1*x_2(t)*u(t), % dot(x)_3(t) = (x_1(t) - 1)^2 + (x_2(t) - 1)^2, % % initial conditions: % % x(0)=[0.5, 0.7, 0]' % % control constraints: % % u(t) \in \{0, 1\} \forall t \in [t_0, t_f] % % Parameters % % [t_0, t_f] = [0, 12] % [c_0, c_1] = [0.4, 0.2] % % % % % %% Problem setup % % Setup parameters: % n = 400; % toms t p = tomPhase('p', t, 0, 12, n); setPhase(p); tomStates x1 x2 x3 tomControls u%integer u %initial states xi = [0.5, 0.7, 0]; %initial guess x0 = {collocate(u == 0) icollocate({x1 == xi(1) x2 == xi(2) x3 == xi(3) })}; %Box constraints cbox = {(0 <= collocate(u) <= 1)}; %Boundary constraints cbnd = {initial({ x1 == xi(1); x2 == xi(2); x3 == xi(3);})}; %Parameters for ODE's c = [0.4, 0.2]'; c0 = c(1); c1 = c(2); %ODE's dx1 = x1 - x1.*x2 -c0*x1.*u; dx2 = -x2 + x1.*x2 - c1*x2.*u; dx3 = (x1 - 1).^2 + (x2 - 1).^2; ceq = collocate({ dot(x1) == dx1 dot(x2) == dx2 dot(x3) == dx3}); %Objective objective = final(x3); %% Solve the problem options = struct; options.name = 'Lotka-Volterra'; %options.type = 'minlp'; %options.solver = 'knitro'; solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options); xopt1 = subs(x1,solution); xopt2 = subs(x2,solution); xopt3 = subs(x3,solution); uopt = subs(u,solution); %Plotting solution figure(1) subplot(3,1,1); ezplot([x1; x2]); legend('Prey','Predator'); xlabel('time'); ylabel('Biomass'); title('Biomasses'); subplot(3,1,2); ezplot(u); legend('u'); xlabel('time'); ylabel('Control'); title('Fishing control'); subplot(3,1,3); ezplot(x3); legend('Obj. Value'); xlabel('time'); title('Objective'); disp('Objective Function Value'); disp(final(xopt3));