-
Notifications
You must be signed in to change notification settings - Fork 1
/
bruteforce.py
89 lines (60 loc) · 2.38 KB
/
bruteforce.py
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
import utils
import scipy
import numpy
# Inicializacao e importacao de dados
print "initializing and loading data"
#mat_file = utils.read_mat("final.mat")
mat_file = utils.read_mat("Final35.mat")
# Variancia
s2 = mat_file["s2"]
# Matriz de probabilidades
matriz_probabilidades = mat_file["probab"]
# Consumo total
Consumo_total = mat_file["x_teste"]
# Vector com o numero de submaquinas de cada maquina
n_maquinas = mat_file["n_maquinas"][0].tolist()
# Vector com o consumo de cada submaquina
pesos = mat_file["pesos"].tolist()[0]
# Variaveis auxiliares
l = scipy.shape(pesos)[0]
t = scipy.shape(Consumo_total)[0]
# Matriz de armazenamento dos resultados de cada problema
optimo = scipy.zeros([t,l,5])
# Geracao da lista de permutacoes
[lista,comb] = utils.calc_comb(n_maquinas, pesos)
# Minimizacao
for n in range(0,1):
print "in problem %s" % n
a = 0;
best =[float('Inf')]*5
# Caso o consumo total seja zero nao e necessario optimizar
if Consumo_total[n] == 0:
continue
# Percorre todas as permutacoes
for idx, c in enumerate(comb):
if idx % 100000 == 0:
print "iteration %s" % idx
# Calculo do vector de combinacoes e dos consumos
[combinacoes, consumos] = utils.uns(lista, c, n_maquinas)
combinacoes = numpy.array(combinacoes)
# Dada a baixa variancia so interessam combinacoes cujo consumo seja igual ao consumo total
if s2 < 0.000001:
if Consumo_total[n]-sum(consumos) != 0:#mudar
continue
# Calculo da primeira parte do funcional de custo
custo = 1/(2*s2)*(Consumo_total[n] - sum(consumos))**2
# Calculo da segunda parte do funcional de custo
custo = custo - numpy.dot(combinacoes,numpy.log(matriz_probabilidades[n,:])) - numpy.dot((1-combinacoes,),numpy.log(1-matriz_probabilidades[n,:]))
# Armazenamento de resultados
for i in xrange(5):
if custo < best[i]:
if i == 5:
best[i] = custo
optimo[n,:,i] = combinacoes
break
for m in range(0,4-i):
best[i] = custo
optimo[n,:,i]
best[i] = custo
optimo[n,:,i] = combinacoes
break