Temperature control from 0.00 to 7.00 hours at night. Finds best heating policy at night that brings the temperature back to 20 [oC] in the morning irrespective of night temperatures.
Programmers: Gerard Van Willigenburg (Wageningen University)
Define tomSym variable t (time) and t_f (final time) if the final time is free
toms t; t_f=7; % Fixed final time
for n=[20 40]
% Define & set time axis
p = tomPhase('p', t, 0, t_f, n);
setPhase(p);
% Define the state and control variables
tomStates x
tomControls u
% Initial state
xi=20;
% Initial guess
if n==20
x0 = {icollocate({x == xi(1)})
collocate({u == 0})};
else
x0 = {icollocate({x == xopt})
collocate({u == uopt})};
end
% Boundary conditions
cbnd = {initial({x == xi}); final({x == xi})};
% Equality constraints: state-space differential equations
tau=2; pH=0.002; % Parameters
% External input d1
d1=15-10*sin(pi*t/t_f);
%Differential equation
ceq = collocate({dot(x) == 1/tau*(d1-x) + pH*u});
% Inequality constraints
cbox = {0 <= collocate(u) <= 3600; icollocate(x) >= 15};
% Cost function to be minimized
objective = integrate(u+1e-6*dot(u)^2);
% Solve the problem after specifying its name
options = struct;
options.name = 'Temperature control at night';
solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options);
% Plot intermediate solution
figure; subplot(2,1,1);
ezplot(x); legend('x');
title('State');
subplot(2,1,2);
ezplot(u); legend('u');
title('Optimal control'); drawnow;
% Obtain intermediate solution to initialize the next
xopt = subs(x,solution);
uopt = subs(u,solution);
end
% Obtain final solution t,x,...,u,..
% that overwrite the associated tomSym variables
t = subs(collocate(t),solution);
x = subs(collocate(x),solution);
u = subs(collocate(u),solution);
%Plot results
figure; plot(t,x,t,u/100); axis([0 t_f -1 50]);
xlabel('Time [h]'); ylabel('Heat input, Inside & Outside temperature');
title('Optimal heating, outside temperature');
legend('Inside temp. [oC]','Outside temp. [oC]');
Problem type appears to be: qp
Starting numeric solver
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2011-02-05
=====================================================================================
Problem: 1: Temperature control at night f_k 12892.776351482709000000
sum(|constr|) 0.000000000002029896
f(x_k) + sum(|constr|) 12892.776351482711000000
f(x_0) 0.000000000000000000
Solver: CPLEX. EXIT=0. INFORM=1.
CPLEX Barrier QP solver
Optimal solution found
FuncEv 11 GradEv 11 ConstrEv 11 Iter 11
CPU time: 0.062500 sec. Elapsed time: 0.031000 sec.
Problem type appears to be: qp
Starting numeric solver
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2011-02-05
=====================================================================================
Problem: 1: Temperature control at night f_k 12882.457401725025000000
sum(|constr|) 0.000000006475484391
f(x_k) + sum(|constr|) 12882.457401731501000000
f(x_0) 0.000000000000000000
Solver: CPLEX. EXIT=0. INFORM=1.
CPLEX Barrier QP solver
Optimal solution found
FuncEv 13 GradEv 13 ConstrEv 13 Iter 13
CPU time: 0.062500 sec. Elapsed time: 0.047000 sec.