Advertisement
Guest User

ordenado

a guest
Oct 28th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. //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.
  2.  
  3.  
  4. //Inicializamos variables
  5. int Año = 0;
  6. int StockUsoSuelo[6] = cantidad de uso de suelo a localizar considerando crecimiento de la ciudad y porcentaje que se relocaliza.
  7. decimal Atributos[X][Y];
  8. decimal Utilidad[X][Y][Uso de suelo]
  9. decimal Logsuma[X][Y];
  10. int mu; //parámetro que utilizaremos para modelar logit y logsuma.
  11. int IDcelda[x][y]
  12. decimal Prob[X][Y][6];
  13.  
  14. //Se inicializa un vector que a cada celda le asigna la cantidad de metros cuadrados disponibles por construir en la celda.
  15. Decimal IDdisponibilidadusosuelo[];
  16.  
  17. //Creamos método que dado los atributos de una celda asigne función de utilidad a los usos de suelo.
  18. public decimal funcionutilidad(Atributos[][], uso de suelo){
  19. funcionutilidad = completar con la función según el atributo y uso de suelo;
  20. return;
  21. }
  22.  
  23. //Llenamos una matriz bidimensional con los atributos de las celdas, donde cada casilla corresponde a una celda
  24. //Asociamos la ID de las celdas según la posición.
  25. //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
  26.  
  27. for(x){
  28. for (y){
  29. if (posición de la celda de la grilla == x,y){
  30. Atributos[x][y].add(atributo de la celda);
  31. IDcelda[x][y].add(ID de la celda);
  32. for(usos de suelo){
  33. Utilidad[x][y][uso de suelo] = funcionutilidad(Atributos[x][y], uso de suelo);
  34. }
  35. }
  36. }
  37. }
  38.  
  39. //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.
  40.  
  41. for(x){
  42. for (y){
  43. Decimal denominador = 0;
  44. for(usos de suelo){
  45. denominador = denominador + (StockUsoSuelo[uso de suelo] * exp (mu*Utilidad[x][y][uso de suelo])*Usopermitido[x][y][uso de suelo]);
  46. }
  47. for (usos de suelo){
  48. 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;
  49. }
  50. logsuma[x][y] = (1/mu) * ln(denominador);
  51. }
  52. }
  53.  
  54. //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.
  55. int[] orden;
  56. public int[] ordenceldas (logsuma[][], IDcelda[][], orden[]){
  57.  
  58. if (Idceldas[][] is empty){
  59. return orden[];
  60. } else{
  61. decimal logsuma = 0;
  62. decimal logsumaporrevisar[][] = logsuma[x][y]; //Se debe llenar mediante un proceso iterativo, aquí se muestra simplificado.
  63. int IDceldasporordenar[][] = IDcelda[x][y]; //Se debe llenar mediante un proceso iterativo, aquí se muestra simplificado.
  64. int listaceldasordenadas[];
  65. int IDtemporal = 0;
  66. for(x){
  67. for(y){
  68. if(logsumaporrevisar[x][y]>logsuma){
  69. }
  70. logsuma = logsuma[x][y];
  71. Idtemporal = IDceldasporordenar[x][y];
  72. }
  73. listasceldasordenadas.add(Idtemporal); //Agregamos el ID a las listas ordenadas, y lo removemos de la lista de celdas por ordenar.
  74. IDceldasporordenar.Remove[Idtemporal]; //Esta no es la forma correcta de removerlo pero se muestra de forma simplificada.
  75. logsumaporrevisar.remove(logsuma);
  76. ordenceldas(logsumaporrevisar[][], IDceldasporordenar[][], listasceldasordenadas[]);
  77. }
  78. }
  79. }
  80.  
  81. //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.
  82. int ID[] = ordenceldas(logsuma[][], IDcelda[][], orden[]);
  83.  
  84.  
  85. //Creamos un método que según la superficie disponible de la celda asigna el uso de suelos.
  86. public decimal[] asignarusodesuelo(celda, IDdisponibilidadusodesuelo[ID], Probabilidades de uso de suelo ){
  87. Decimal IDdisponibilidadnueva[];
  88. //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.
  89. return IDdisponibilidadnueva[];
  90. }
  91.  
  92. for (ID){
  93. asignarusodesuelo(ID, IDdisponibilidadusodesuelo[ID], Probabilidades de uso de suelo);
  94. }
  95. //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.
  96. año++;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement