Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2014-1
Este proceso que se repite una y otra vez, siempre inicia en un punto
extremo de la regin factible que normalmente es el origen, en cada
iteracin se mueve a otro punto extremo adyacente hasta llegar a la
solucin ptima.
Los pasos del Mtodo Simplex son los siguientes:
1. Utilizando la forma estndar, determinar una solucin bsica factible
inicial igualando a las n-m variables igual a cero (el origen).
2. Seleccionar la variable de entrada de las variables no bsicas que al
incrementar su valor pueda mejorar el valor en la funcin objetivo.
Cuando no exista esta situacin, la solucin actual es la ptima; si no,
ir al siguiente paso.
3. Seleccionar la variable de salida de las variables bsicas actuales.
4. Determinar la nueva solucin al hacer la variable de entrada bsica y
la variable de salida no bsica, ir al paso 2 (actualizar).
ALGORITMO EN C++:
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Lo maximo que pueden alcanzar las variables y restricciones
#define MAX 10
#define RESTRICCION 3
double funcion[MAX], restricciones[MAX+1][MAX+RESTRICCION];
double independiente[RESTRICCION];
int leeDatos(int *var) {
int rest,c,i;
printf(" Funcion a Optimizar \nNumero de Variables: ");
scanf("%d",var);
printf("\nRecuerda: c1.X1+c2.X2+...cn.Xn = b \n\n");
for(c=0;c<*var;c++)
{
printf(" c%d: ", c+1);
scanf("%lf",&funcion[c]);
fflush(stdin);
}
printf("\nNumero de Restricciones: ");
scanf("%d",&rest);
fflush(stdin);
for(i=0;i<rest;i++)
{
printf("Restriccion %d\n",i+1);
for(c=0;c<*var;c++)
{
printf(" c%d: ",c+1);
scanf("%lf",&restricciones[i][c]);
fflush(stdin);
}
printf("Termino independiente ");
scanf("%lf", &independiente[i]);
fflush(stdin);
}
return rest;
}
int main(void)
{
int rest, var, ni ;
int i,j, k, columna, renglon, count, cuenta;
double maximo = 0, menor, aux, mult, temp;
rest = leeDatos(&var);
//Crear tabla inicial simplex
for(i=0;i<rest;i++)
for(j=0; j<rest; j++)
if (i == j)
restricciones[i][var+j]=1;
else
restricciones[i][var+j]=0;
for(i=0; i<rest;i++)
restricciones[i][var+rest] = independiente[i];
for(j=0; j<var; j++)
restricciones[rest][j] = funcion[j] * -1;
for(j=var; j<rest+var; j++)
restricciones[rest][j] = 0;
ni=1;
printf("\n-----------------------------------------------");
printf("\n ITERACION %d",ni);
printf("\n-----------------------------------------------\n");
ni++;
}
printf("\nPivote:
%.2lf,
renglon
%d
%d",restricciones[renglon][columna], renglon, columna);
//Encontrar los coeficientes de la nueva tabla
aux = restricciones[renglon][columna];
for(j=0; j<=(rest+var); j++)
restricciones[renglon][j] = restricciones[renglon][j] / aux;
for(i=0; i<=rest; i++) {
if (i == renglon )
continue;
else {
aux = restricciones[i][columna] * -1;
for(k=0; k <= rest+var; k++) {
restricciones[i][k] = (aux * restricciones[renglon][k]) +
restricciones[i][k];
}
}
}
printf("\n-----------------------------------------------");
printf("\n ITERACION %d",ni);
printf("\n-----------------------------------------------\n");
ni++;
for(i=0; i<=rest; i++) {
for(j=0; j<=rest+var; j++)
printf(" %.2lf \t", restricciones[i][j]);
printf("\n");
}
cuenta = 0;
for(j=0;j<rest+var;j++)
if(restricciones[rest][j] >= 0)
cuenta++;
if (cuenta == rest+var)
break;
} while(cuenta);
printf("---->");
getch();
}
FUENTES:
columna
http://www.ingenieriaindustrialonline.com/herramientas-para-elingeniero-industrial/investigaci%C3%B3n-de-operaciones/m
%C3%A9todo-simplex/
http://www.forosdelweb.com/f96/metodo-simplex-c-826061/
http://es.wikipedia.org/wiki/George_Dantzig
int y;
printf("ingrese un numero: ");
scanf("%f",&x);
y=x;
x=x-y;
if(x>0)
printf("es decimal\n\n");
else
printf("es entero\n\n");
return 0;
}
FUENTES:
Weisstein, Eric W., "Integer Relation", MathWorld.
A Polynomial Time, Numerically Stable Integer Relation Algorithm
http://en.wikipedia.org/wiki/Integer_relation_algorithm
EL ALGORITMO
Inicio (1)
t=0
inicializar P(t)
evaluar P(t)
Mientras (no se cumpla la condicin de parada) hacer
Inicio(2)
t=t+1
seleccionar P(t) desde P(t-1)
P(t)
cruce P(t)
P(t)
mutacin P(t)
P(t)
reemplazamiento (P(t-1),P(t))
evaluar P(t)
Final(2)
Final(1)
Ejemplo del algoritmo:
#include <stdio.h>
int main(int argc, char** argcv)
{
for(int i = 1; i <= 10; i++) {
printf("Esta es la vez %d que hago esto!\n", i);
}
return 0;
}
Fuentes:
http://es.wikipedia.org/wiki/Algoritmo_iterativo
http://www.lcc.uma.es/~villa/tn/tema05.pdf
http://sci2s.ugr.es/docencia/doctoCaminos/Sesion-1-b.pdf
sobre
Sistemas
AO:
1962
PARA QU SE USA?
Cuando hablamos de algoritmos genticos, hay que hablar de John
Holland que en 1962 asienta las bases para sus posteriores desarrollos
hasta llegar a lo que se conoce hoy por algoritmos genticos.
Un algoritmo gentico es un mtodo de bsqueda que imita la teora de
la evolucin biolgica de Darwin para la resolucin de problemas. Para
ello, se parte de una poblacin inicial de la cual se seleccionan los
individuos ms capacitados para luego reproducirlos y mutarlos para
finalmente obtener la siguiente generacin de individuos que estarn
ms adaptados que la anterior generacin.
En la naturaleza todo el proceso de evolucin biolgica se hace de forma
natural pero para aplicar el algoritmo gentico al campo de la resolucin
de problemas habr que seguir una serie de pasos.
Una premisa es conseguir que el tamao de la poblacin sea lo
suficientemente grande para garantizar la diversidad de soluciones. Se
aconseja que la poblacin sea generada de forma aleatoria para obtener
dicha diversidad. En caso de que la poblacin no sea generada de forma
aleatoria habr que tener en cuenta que se garantice una cierta
diversidad en la poblacin generada.
CUL ES EL ALGORITMO?
Los pasos bsicos de un algoritmo gentico son:
Evaluar la puntuacin de cada uno de los cromosomas generados.
Permitir la reproduccin de los cromosomas siendo los ms aptos los
que tengan ms probabilidad de reproducirse.
llifndef SGA_H_
lldefine SGA_H_
llinclude <stdio.h>
llinclude <stdlib.h>
llinclude <assert.h>
llinclude <float.h>
llinclude <math.h>
llinclude "ctes.h"
llinclude // Vector.h"
llinclude "random.h"
llinclude "absindv.h"
lldefine ASCENDENTE
lldefine DESCENDENTE
class GA {
protected:
int
float
float
long
Absindiv
Absindiv
float
Mutacion.
float
Cruzamiento.
1
2
Censo;
MinFitness;
MaxFitness;
Generation;
**Poblacion;
**PobTmp;
ProbMutation;
ProbCross;
//
//
//
//
//
//
//
//
Censo of GA.
Minimo fitness.
Maximo fitness
Generacion actual
Puntero a la poblacion.
Poblacin Temporal.
Probabilidad de
Probabilidad de
// Ordena un vector de punteros a individuos.
void
ASCENDENTE);
public:
SortAbsindiv(Absindiv **P, int ORDEN 86 Antonio M. Carpintero Snchez
// Constructores.
GA ( Absindiv *indiv, int Numindiv )
// Constructor de copia.
GA ( const GA & P );
// Destructor.
virtual -GA();
// Retorna el censo de la poblacion.
int GetCenso(void) {return Censo;}
// Visualiza la poblacion.
void Show(void);
// Retorna el indice del individuo con mayor fitness.
int GetMaxFitness(void) const;
// Retorna el ipdice del individuo con menor fitness.
int GetMinFitness(void) const;
// Inicializa aleatoriamente individuos desde iStart hasta
iEnd.
void Random(int iStart = O,int iEnd=O);
// Selecciona un individuo que sea distinto de "i"
int Select(int i -1);
// Realiza una iteracion delGA.
void OneGeneration(void);
// Ordena la poblacion segun ORDEN.
void SortPob(int ORDEN= ASCENDENTE);
// Ordena la poblacion temporal segun ORDEN.
void SortPobTmp(int ORDEN= ASCENDENTE);
// Normaliza las probabilidades de la poblacion temporal.
void NormalizeTmp(void);
// Normaliza las probabilidades de la poblacion.
void NormalizePob(void);
// Normaliza las probabilidades de un vector de punteros a
individuos.
void Normalize(Absindiv **);
// Reinicializa las poblaciones.
void Reset(void);
// Retorna el numero de generacion actual.
long GetGeneration(void) const {return
Generation;};
// Calcula los fenotipos de los individuos. Redes de Neuronas .... 87
};
void SetPhenotype(void);
// Calcula los fitness de los individuos.
void SetFitness(void);
// Sustituye los individuos [iStart .. iEnd] de la poblacion
por los
// de la poblacion temporal [iStart .. iEnd].
void Replace(int iStart , int iEndl;
// Asigna la probabilidad de mutacion.
void
p;}
SetProbMutation(float P) { ProbMutation
// Asigna la probabilidad de cruce.
void SetProbCross(float P) { ProbCross p;}
// Intercambia dos punteros a individuos.
void Swap(Absindiv* &Indl,Absindiv* &Ind2);
// Operadores.
// Operador de asignacion.
GA& operator=(const GA& V);
// Retorna una referencia al individuo i.
Absindiv& operator[] (int i);
#endif
FUENTES:
http://www.it.uc3m.es/jvillena/irc/practicas/06-07/05.pdf
http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf
http://es.wikipedia.org/wiki/Algoritmo_gen%C3%A9tico