Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Este seudocódigo muestra el procedimiento que esperamos realizar en la simulación. Está simplificado y se detendrá cuando ninguna celda tenga espacio disponible para relocalizar. En este código se muestra una iteración la cual debe terminar actualizando los atributos, usos de suelo, y disponibilidad de cada celda. Se iterará hasta que no queden celdas con vacancia.
- //Inicializamos variables
- int Año = 0;
- int StockUsoSuelo[6] = cantidad de uso de suelo a localizar considerando crecimiento de la ciudad y porcentaje que se relocaliza.
- decimal Atributos[X][Y];
- decimal Utilidad[X][Y][Uso de suelo]
- decimal Logsuma[X][Y];
- int mu; //parámetro que utilizaremos para modelar logit y logsuma.
- int IDcelda[x][y]
- decimal Prob[X][Y][6];
- //Se inicializa un vector que a cada celda le asigna la cantidad de metros cuadrados disponibles por construir en la celda.
- Decimal IDdisponibilidadusosuelo[];
- //Creamos método que dado los atributos de una celda asigne función de utilidad a los usos de suelo.
- public decimal funcionutilidad(Atributos[][], uso de suelo){
- funcionutilidad = completar con la función según el atributo y uso de suelo;
- return;
- }
- //Llenamos una matriz bidimensional con los atributos de las celdas, donde cada casilla corresponde a una celda
- //Asociamos la ID de las celdas según la posición.
- //Llenamos matriz tridimensional donde según la celda y sus atributos, se asigna la función de utilidad de cada uso de suelo para esa celda
- for(x){
- for (y){
- if (posición de la celda de la grilla == x,y){
- Atributos[x][y].add(atributo de la celda);
- IDcelda[x][y].add(ID de la celda);
- for(usos de suelo){
- Utilidad[x][y][uso de suelo] = funcionutilidad(Atributos[x][y], uso de suelo);
- }
- }
- }
- }
- //Teniendo el stock de cada uso de suelo y disposición a pagar de cada uso suelo en una determinada celda, vamos a calcular la probabilidad de que dada una celda, el tipo de suelo sea el mejor postor.
- for(x){
- for (y){
- Decimal denominador = 0;
- for(usos de suelo){
- denominador = denominador + (StockUsoSuelo[uso de suelo] * exp (mu*Utilidad[x][y][uso de suelo])*Usopermitido[x][y][uso de suelo]);
- }
- for (usos de suelo){
- Prob[x][y][uso de suelo] = (StockUsoSuelo[uso de suelo] * exp (mu*Utilidad[x][y][uso de suelo])*Usopermitido[x][y][uso de suelo])/denominador;
- }
- logsuma[x][y] = (1/mu) * ln(denominador);
- }
- }
- //Ya calculadas la función de logsuma para saber la máxima esperanza de la disposición a pagar, ordenaremos las celdas según esto. Crearemos un método que lo ordene.
- int[] orden;
- public int[] ordenceldas (logsuma[][], IDcelda[][], orden[]){
- if (Idceldas[][] is empty){
- return orden[];
- } else{
- decimal logsuma = 0;
- decimal logsumaporrevisar[][] = logsuma[x][y]; //Se debe llenar mediante un proceso iterativo, aquí se muestra simplificado.
- int IDceldasporordenar[][] = IDcelda[x][y]; //Se debe llenar mediante un proceso iterativo, aquí se muestra simplificado.
- int listaceldasordenadas[];
- int IDtemporal = 0;
- for(x){
- for(y){
- if(logsumaporrevisar[x][y]>logsuma){
- }
- logsuma = logsuma[x][y];
- Idtemporal = IDceldasporordenar[x][y];
- }
- listasceldasordenadas.add(Idtemporal); //Agregamos el ID a las listas ordenadas, y lo removemos de la lista de celdas por ordenar.
- IDceldasporordenar.Remove[Idtemporal]; //Esta no es la forma correcta de removerlo pero se muestra de forma simplificada.
- logsumaporrevisar.remove(logsuma);
- ordenceldas(logsumaporrevisar[][], IDceldasporordenar[][], listasceldasordenadas[]);
- }
- }
- }
- //Ya hecho el orden de las celdas, mediante el método de montecarlo se asignan uso de suelo a cada celda, y se actualiza la disponibilidad de la celda.
- int ID[] = ordenceldas(logsuma[][], IDcelda[][], orden[]);
- //Creamos un método que según la superficie disponible de la celda asigna el uso de suelos.
- public decimal[] asignarusodesuelo(celda, IDdisponibilidadusodesuelo[ID], Probabilidades de uso de suelo ){
- Decimal IDdisponibilidadnueva[];
- //Este método recibe las probabilidades asociadas a una celda y la disponibilidad de suelo de una celda y asigna el uso. Una vez asignado los flujos cambia los atributos de la celda según el aumento de uso de suelo y actualiza la disponibilidad de uso de suelo para luego retornarlo.
- return IDdisponibilidadnueva[];
- }
- for (ID){
- asignarusodesuelo(ID, IDdisponibilidadusodesuelo[ID], Probabilidades de uso de suelo);
- }
- //Aplicado el método en todas las celdas queda asignado el uso de suelo, se actualizan los atributos de la celda y su disponibilidad y se vuelve a iterar.
- año++;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement