-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__main__.py
More file actions
92 lines (74 loc) · 2.82 KB
/
__main__.py
File metadata and controls
92 lines (74 loc) · 2.82 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
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
import configparser
import numpy as np
import pandas as pd
from cluster import Clustering
from genetic import Genetic
from generation import Generation
NORMALIZATION = True
def readVars(config_file):
config = configparser.ConfigParser()
config.read(config_file)
budget = int(config.get("vars", "budget"))
kmax = int(config.get("vars", "kmax")) # Maximum number of Clusters
numOfInd = int(config.get("vars", "numOfInd")) # number of individual
Ps = float(config.get("vars", "Ps"))
Pm = float(config.get("vars", "Pm"))
Pc = float(config.get("vars", "Pc"))
return budget, kmax, Ps, Pm, Pc, numOfInd
# minmax normalization
def minmax(data):
normData = data
data = data.astype(float)
normData = normData.astype(float)
for i in range(0, data.shape[1]):
tmp = data.iloc[:, i]
# max of each column
maxElement = np.amax(tmp)
# min of each column
minElement = np.amin(tmp)
# norm_dat.shape[0] : size of row
for j in range(0, normData.shape[0]):
normData[i][j] = float(
data[i][j] - minElement) / (maxElement - minElement)
normData.to_csv('result/norm_data.csv', index=None, header=None)
return normData
if __name__ == '__main__':
config_file = "config.txt"
if(NORMALIZATION):
data = pd.read_csv('data/iris.csv', header=None)
data = minmax(data) # normalize
else:
data = pd.read_csv('result/norm_data.csv', header=None)
# size of column
dim = data.shape[1]
# kmeans parameters & GA parameters
generationCount = 0
budget, kmax, Ps, Pm, Pc, numOfInd = readVars(config_file)
print("-------------GA Info-------------------")
print("budget", budget)
print("kmax", kmax)
print("numOfInd", numOfInd)
print("Ps", Ps)
print("Pm", Pm)
print("Pc", Pc)
print("---------------------------------------")
# dim or pattern id
chromosome_length = kmax * dim
#-------------------------------------------------------#
# main #
#-------------------------------------------------------#
initial = Generation(numOfInd, 0)
initial.randomGenerateChromosomes(
chromosome_length) # initial generate chromosome
clustering = Clustering(initial, data, kmax) # eval fit of chromosomes
# ------------------calc fitness------------------#
generation = clustering.calcChromosomesFit()
# ------------------------GA----------------------#
while generationCount <= budget:
GA = Genetic(numOfInd, Ps, Pm, Pc, budget, data, generationCount, kmax)
generation, generationCount = GA.geneticProcess(
generation)
iBest = generation.chromosomes[0]
clustering.printIBest(iBest)
# ------------------output result-------------------#
clustering.output_result(iBest, data)