-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinitialice.cpp
More file actions
63 lines (44 loc) · 1.8 KB
/
Copy pathinitialice.cpp
File metadata and controls
63 lines (44 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<bits/stdc++.h>
#include "global.h"
using namespace std;
individuo initialize_ind(vector<vector<int>> &initial_yard, vector<int>& stack_position){
individuo new_ind;
new_ind.moves = {};
new_ind.fobj[0] = 0;
new_ind.fobj[1] = 0;
//Copiamos variables iniciales para trackear los movimientos
vector<vector<int>> actual_yard = initial_yard;
vector<int> actual_positions = stack_position;
//Creamos movimientos hasta que ya no queden containers
int id_to_retrieve = 1;
int n_containers_actual = n_initial_containers;
while(n_containers_actual > 0){
new_ind.fobj[0]++;
int origin_stack = actual_positions[id_to_retrieve];
int h_origin = actual_yard[origin_stack].size();
//Si está en el tope lo sacamos y no guardamos ninguna heurística
if(id_to_retrieve == actual_yard[origin_stack][h_origin-1]){
actual_yard[origin_stack].pop_back();
actual_positions[id_to_retrieve] = -1;
id_to_retrieve++;
n_containers_actual--;
}
//Si no es así entonces tenemos que decidir que heurística usar y guardarla en la lista
else{
int coded_heuristic = apply_random_heuristic(actual_yard, actual_positions, origin_stack);
new_ind.moves.push_back(coded_heuristic);
}
}
//Retornamos el individuo creado
return new_ind;
}
//Need to ad a initialize_pop
vector<individuo> initialize_pop(vector<vector<int>> &initial_yard, vector<int> &stack_positions){
vector<individuo> pop = {};
for(int i = 0; i < params.popsize; i++){
//Copiamos el yard para inicializarl a cada individuo
individuo new_ind = initialize_ind(initial_yard, stack_positions);
pop.push_back(new_ind);
}
return pop;
}