class TTP

Defined in:

ttp-inst/ttp.cr
ttp-inst/ttp/ttp-evaluation.cr
ttp-inst/ttp/ttp-io.cr
ttp-inst/ttp/ttp-sol-validation.cr

Constructors

Class Method Summary

Instance Method Summary

Constructor Detail

def self.new(name : String, kp_type : String, ncities : Int32, nitems : Int32, mx_wgt : Int32, mx_vel : Float64, mn_vel : Float64, rratio : Float64, edge_type : String, cities : Array(City), items : Array(Item)) #

[View source]

Class Method Detail

def self.load(filename : String) #

Lee el archivo de instancia y regresa el objeto que la representa.

El formato del archivo esperado es :

  ________________________________________________________________
 | PROBLEM_NAME:           a280-TTP                               |
 | KNAPSACK_DATA_TYPE:     uncorrelated                           |
 | DIMENSION:              280                                    |
 | NUMBER_OF_ITEMS:        279                                    |
 | CAPACITY_OF_KNAPSACK:   25437                                  |
 | MIN_SPEED:              0.1                                    |
 | MAX_SPEED:              1                                      |
 | RENTING_RATIO:          7.76                                   |
 | EDGE_WEIGHT_TYPE:       CEIL_2D                                |
 | NODE_COORD_SECTION (INDEX, X, Y):                              |
 | 1 100 200                                                      |
 | ...                                                            |
 | ITEMS_SECTION (INDEX, PROFIT, WEIGHT, ASSIGNED_NODE_NUMBER):   |
 | 1 788 971 2                                                    |
 | ...                                                            |
 |________________________________________________________________|

[View source]

Instance Method Detail

def acc_wgt(sol : Thief) #

Peso acumulado en cada parada del recorrido

  w[0]=wgt
  |        w[1]=w[0]+wgt
  |        |              w[-1]=w[-2]+wgt
 t[0]  -> t[1]  ->  ... -> t[-1]

[View source]
def cities : Array(City) #

[View source]
def cities_wgt(plan : Plan) #

Peso de los objetos seleccionados en cada ciudad


[View source]
def dist(row, col) #

Cálculo de la distancia


[View source]
def distance(sol : Thief) #

Calcula la distancia total del recorrido


[View source]
def edge_type : String #

[View source]
def fitness(sol : Thief) #

Función objetivo del TTP , debe maximizarse, representa la ganancia final de vender los objetos recolectados y pagar la renta de transportarlos por el tiempo que toma recorrer la ruta especificada.

                        dz  
F(Ξ,Π) =  Σ p + ρ  Σ -------- 
         p∈Π      z∈Ξ v(w(z))

[View source]
def fitness_errors(fit : String, thief : String, tp_separator = " ", lmnt_separator = ",") #

Validación del resultado de fitness se compara el valor fit frente al cálculo. Se considera correcto si son iguales empleando una tolerancia de 0.001.


[View source]
def items : Array(Item) #

[View source]
def kp_type : String #

[View source]
def mn_vel : Float64 #

[View source]
def mx_vel : Float64 #

[View source]
def mx_wgt : Int32 #

[View source]
def name : String #

[View source]
def ncities : Int32 #

[View source]
def nitems : Int32 #

[View source]
def nu : Float64 #

[View source]
def plan_errors(str : String, separator = ",") #

Plan validation

  • Items must be represented with 0 or 1
  • The plan must have the same number of items as the instance
  • The total weight of selected items must be <= to the capacity

Returns a flag with the errors found in the plan


[View source]
def profit(plan : Plan) #

Ganancia que se obtiene por la suma del valor de los objetos recolectados.


[View source]
def rem_dist(sol : Thief) #

Distancia faltante para terminar el recorrido en cada paso.

 d[0]= -------------------------------| rem_dist[0]
          d[1]= ----------------------| rem_dist[1]
                   d[-2]--------------| rem_dist[-2]
                          d[-1]= -----| rem_dist[-1]
                            
 [0]  ->   [x]  ->  ... -> [x]  ->  [0]       
  0         1              -1       

[View source]
def rem_dist_at_city(sol : Thief) #

Distancia faltante para terminar el recorrido en cada ciudad

d[t[0]] -----------------------------| rem_dist_at_city[tour[0]]
                     d[t[1]] --------| rem_dist_at_city[tour[1]]
       d[t[-2]] ---------------------| rem_dist_at_city[tour[-2]]
               d[t[-1]] -------------| rem_dist_at_city[tour[-1]]

 [0]  ->   [x]  ->  ... -> [x]  ->  [0]       
  0         1               -1   

[View source]
def rratio : Float64 #

[View source]
def thief_errors(str : String, tp_separator = " ", lmnt_separator = ",") #

Validación de una solución

str es una cadena de texto que representa a la solución con la forma

"1,2,3,4 0,0,0,1,0,1"

en donde tp_separator separa el recorrido del plan de recolección y lmnt_separator separa cada elemento del plan y del recorrido.

Un plan válido debe cumplir las siguientes caracteristicas

  • La cadena de texto debe tener el recorrido seguido por el plan de recolección
  • Las ciudades deben visitarse una sola vez (sin repetición).
  • El recorrido debe tener la cantidad de ciudades correcta para la instancia
  • El recorrido debe iniciar en la ciudad '1'
  • Las ciudades deben ser representadas en el rango (1 .. #ciudades)
  • El peso total de los objetos seleccionados debe ser menor o igual que la capacidad
  • El plan de recolección debe tener la cantidad de objetos correcta para la instancia
  • Los objetos a recolectar deben ser representados con '1' (seleccionado) o '0' (ignorado).

[View source]
def time(sol : Thief) #

Tiempo que tarda en visitarse las ciudades del recorrido, el tiempo se ve afectado por los objetos seleccionados, entre mayor peso se lleve mas lento se recorre.

 tour[0] -> ... -> tour[i] -> ... -> tour[-1]

   tour.size - 1
tiempo = Σ  tiempo ir de tour[i] a tour[i+1] con peso w[i]                        
         0

[View source]
def tour_errors(str : String, separator = ",") #

Tour validation

  • Each city must be visited once and only once
  • The tour must have the same number of items as the instance
  • The tour must start from the city '1'
  • Cities must be represented with ids form (1 .. ncities )

Returns a flag with the errors found in the plan


[View source]
def wgt(sol : Thief) #

Extra --------------------------------------------------------------------- Calcula el peso total de la recolección de objetos


[View source]