-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcuttingStock.cpp
117 lines (93 loc) · 3.02 KB
/
cuttingStock.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "FFD.h"
#include "utilities.h"
#include "localSearchBB.h"
#include "ILS.h"
#include "GRASP.h"
using namespace std;
int main(int argc, char *argv[]) {
char * line = (char *) malloc(sizeof(char)*60);
ifstream instance(argv[1]);
int i;
if (instance.is_open()) {
int nroll_type; // Número de Stock Roll type
instance.getline(line, 60);
sscanf(line,"%*s %d", &nroll_type);
int ntpieces; // Número de tipo piezas
instance.getline(line, 60);
sscanf(line,"%*s %d", &ntpieces);
// Se leen nroll_type líneas para almacenar
// las longitudes de cada tipo de roll.
vector<int> rlenght(nroll_type);
for(i = 0; i < nroll_type; i++) {
instance.getline(line, 60);
sscanf(line,"%d", &rlenght[i]);
}
vector<int> lot_s(ntpieces); // Tamaño de lote
vector<int> lpiece(ntpieces); // Longitud de pieza
vector<int> dpiece(ntpieces); // Demanda de pieza
// Se leen ntpieces líneas para almacenar
// la longitud de cada pieza, demanda y tamaño de
// lote
for(i = 0; i < ntpieces; i++) {
instance.getline(line, 60);
sscanf(line,"%d %d %d",&lpiece[i],&dpiece[i],&lot_s[i]);
}
// Arreglo de desperdicios por cutting group
vector<int> leftover(ntpieces);
for(i = 0; i < ntpieces; i++)
leftover[i] = 0;
// Vector de Rolls usados por cada cutting group
vector<int> used_rolls(ntpieces);
for(i = 0; i < ntpieces; i++)
used_rolls[i] = 0;
// Vector que indica el tipo de roll que se usa
// en la i-ésima posición de la solución
vector<int> rollType(ntpieces);
for(i = 0; i < ntpieces; i++)
rollType[i] = -1;
vector<int> variety(ntpieces,1);
vector<vector<int>*> cg = genInitSol(rlenght,lpiece,
dpiece, leftover,
used_rolls,
rollType);
METAHEURISTIC(cg,rlenght,lot_s,lpiece,dpiece,leftover,
used_rolls,rollType,variety);
free_vector(cg);
free(line);
instance.close();
}
else
cout << "Error leyendo instancia" << endl;
}
// vector<int> b;
// b.push_back(74);
// b.push_back(91);
// b.push_back(55);
// b.push_back(100);
// vector<int> c;
// c.push_back(15);
// c.push_back(8);
// c.push_back(0);
// c.push_back(10);
// pair<int,int> a = FFD(1000, b, c);
// cout << a.first << " " << a.second << endl;
// vector<int> a;
// a.push_back(5);
// a.push_back(0);
// vector<int> f;
// f.push_back(2);
// f.push_back(0);
// pair <int,int> c = FFD(10,a,f);
// cout << "leftover " << c.second << endl;
// cout << "rolls " << c.first << endl;
// vector<int> f;
// f.push_back(4);
// f.push_back(2);
// vector<int> a;
// a.push_back(4);
// a.push_back(2);
// pair<int,vector<vector<int>*> > c = FFD(11,f,a);
// cout << leftOver(c.second,11, f) << endl;