Blogia
Beca CFL

Ideas

Modificar entrada de datos

La unica entrada de datos posible seria de todos con igual número de columnas. Y ahora lo que estamos haciendo es partiendolo en dos.

Así se hace muy costoso el obtener ficheros válidos para nuestra entrada de datos.

Es necesario modificarlo. Deberiamos poder poner un número de columnas que fuera igual al número de localizaciones y lo demás a 0.

 

Paso para leer datos del fichero y asignarlos bien

Si el número de localizaciones es impar no sale el ejercicio por que el paso tiene una división entre 2.

Esto tengo que contemplarlo, es decir, tengo que arreglarlo con un if comprobando si el número es par o impar, mediante el módulo.

 

IntVars

Parece que IntVars no esta funcionando por que si resolvemos sin Cplex con la llamada a linprog, obtenemos resultados que no son en ningun caso enteros, sino todos lineales.

En cambio, cuando hacemos la llamada a linprog desde Cplex, pone todos los valores de las x a enteros, 0 ó 1, y las y a continuos.

Realmente, debería ser al revés, es decir, para los valores de las x que fueran valores continuos, y el valor de la y deberia ser entero.

 

 

Llamada a mipSolve

Dos lineas de investigación para probar el funcionamiento de mipSolve

- Resolver Rardin con llamadas mipSolve

       Es necesario hacer cambios en la matrices que se le pasan al problema ya que en mipSolve no existe un matriz que sea Aeq

       También tenemos que añadir las variables restantes que antes no teniamos y ahora si.

- Resolver el cap 41 con menos datos.

     Reducir el problema a número de clientes 10 y de localizaciones a 5, en principio.

 

Manejo de IntVars

Esto es sencillo.

IntVars es un  vector que identificará las variables que le pasamos a una llamada, para saber si son enteras o continuas. También acepta valores binarios.

Se usa de la siguiente manera.

Si el vector esta vacío, se entiende que no hay variables enteras.

Si el vector tiene n elementos y estos tienen valores 0 o 1, se entiende como que los valores a 1 identifican la posición de la salida en la que se encuentra un número entero o binario. Si es 0, es una variable continua.

Si el vector contiene valores mayores que 1 (>1), se considera que son las posiciones de los variables de tipo entero o binario.

IntVars

Tal y como yo pensaba la clave esta en IntVars.

Este vector define que variables de nuestro programa son enteras o binarias. Por tanto, tenemos que las y_i tienen que ser binarias, ya que solo pueden tomar valor de 0 o 1. Es decir, 0 , esta cerrada la localización, y 1 , está abierta la localización.

Para las x_ij, deben estar entre 0 y 1, pero no tienen que ser binarias, ni enteras. La definición de los límites se contempla en x_U y x_L .

 

Matriz diagonal de matrices

Para poder hacer una matriz diagonal que contenga en ella otra matices hay que hacerla asi:

                                                |A 0 .. 0|
Y = BLKDIAG(A,B,...) produce |0 B .. 0|
                                                |0 0 .. |

Esto nos servira para poder construir nuestra matriz Aeq.

Matriz de matrices

Y yo dandole vueltas a algo tan sencillo como esto

Si queremos hacer una matriz de matrices en Matlab, basta con crearlas y colocarlas en el orden que queramos. Lo peor es que todo esto hay que hacerlo en ejecucion y dependiendo de los datos que nos pasen.

Si tenemos que A B C y D son 4 matrices que queremos añadir basta con hacer esto:

M = [ A B

          C D]

Asi conseguimos que M sea una matriz de matrices.

Ahora el problema lo tengo por que solo tengo dos matrices, una de ceros y otra de unos, y necesito que la matriz de unos se encuentre en la diagonal.

Voy  a ver si podemos construirla con diag() y si no me tocara a base de for. Intentare crear la primera fila y despues solo es añadir filas por debajo. Pero teniendo en cuenta en que fila me encuentre para colocar donde deben aparecer los unos.

Nada mas hasta ahora.

Luego me pondre con el infome resumen de todo lo avanzado.

Version de evaluación de Tomlab

    He vuelto a pedir otro par de versiones de evaluación del Tomlab, así podemos seguir trabajando con ellas sin tener que comprarlas.

    Se pueden pedir a través del registro de la pagina http://tomopt.com/tomlab/.

    Así vamos trabajando sin poner un euro.

Tomlab, CPlex y demás

Me he bajado una versión de prueba para el CPlex de la versión de pago. Se llama Tomlab, y es la interfaz entre el MatLab y el CPlex. A ver si puedo ver el codigo fuente o algo, y me ayuda a hacer el mexfiles para la versión 11 de CPlex.

Y con esto, a dormir.