9. Anexos.
9. Anexos.
9. Anexos.
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
no-lineal.<br />
<strong>Anexos</strong>.<br />
Las funciones no-lineales que expresan estas restricciones se introducen en un fichero<br />
aparte que debe tener el mismo nombre que la función que alberga. Por lo tanto se debe<br />
crear un fichero nonlcon.m en el que se introduzca el código. nonlcon devuelve cuatro<br />
vectores C,Ceq,DC y DCeq.<br />
• C contiene las restricciones que se expresan como ecuaciones no-lineales<br />
• Ceq contiene las que se expresan como inecuaciones no-lineales.<br />
• DC es el gradiente de C. No es necesario proporcionar dicho gradiente, pero si<br />
recomendable puesto que el resultado es mejor si dicho gradiente se calcula<br />
analíticamente en vez de dejar que Matlab lo calcule numéricamente 1 .<br />
• DCeq es el gradiente de Ceq. Se calcula analíticamente por las mismas razones<br />
que DC.<br />
A continuación se muestra el código de nonlcon.m.<br />
function [C,Ceq,DC,DCeq] = nlincon(Xij,coste,NumTerminales)<br />
C=[];<br />
DC=[];<br />
DCeq=[];<br />
Ceq=zeros(size(Xij,1)/2,1);<br />
aux=size(Ceq,1);<br />
for i=1:1:aux<br />
end<br />
Ceq(i)=Xij(i)*Xij(i+size(Xij,1)/2);<br />
DCeq=zeros(size(Xij,1),size(Ceq,1));<br />
for i=1:1:size(Ceq,1)<br />
end<br />
DCeq(i,i)=Xij(i+size(Xij,1)/2);<br />
for i=1:1:size(Ceq,1)<br />
end<br />
DCeq(i+size(Xij,1)/2,i)=Xij(i);<br />
Como se puede observar, tanto C como DC son nulas, esto es debido a que nuestras<br />
restricciones no lineales son ecuaciones, no inecuaciones.<br />
x ij ⋅x ji =0 ;∀i , j∈A<br />
El número de restricciones no lineales es igual al número de arcos no-dirigidos del<br />
problema.<br />
DCeq es una matriz con el doble número de columnas que de filas puesto que tiene que<br />
tener la siguiente forma:<br />
1 Así se especifica en la documentación de Matlab sobre esta función.<br />
6