forked from gabriel301/DiscreteOptimizationCoursera
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathParametersConfiguration.py
100 lines (82 loc) · 4.15 KB
/
ParametersConfiguration.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
90
91
92
93
94
95
96
97
98
99
from Util import Util
from EnumSettings import Strategy,ImprovementType,SolvingParadigm,InitialSolutionFunction,MipSolver
import time
import datetime
class ParametersConfiguration:
def __init__(self,facilityCount,instanceSize):
self.instanceSize = instanceSize
self.facilityCount = facilityCount
self.params = None
self.__setStrategyParameters(instanceSize)
def __getQuantilesIntervals(self):
firstQuantile = Util.truncate(self.params["initial_facilities_subproblem"]/float(self.facilityCount),10)
if(firstQuantile > 1.0):
firstQuantile = 1
quantileIntervals = round(1.0/firstQuantile)
intervals = [0]*quantileIntervals
quantile = firstQuantile
for interval in range(0,quantileIntervals):
intervals[interval] = quantile
quantile = Util.truncate(quantile + firstQuantile,10)
if(quantile > 1.0):
break
result = [interval for interval in intervals if interval > 0 ]
return result
def getParameters(self):
return self.params
def __setStrategyParameters(self,instanceSize):
if(self.params is None):
if (instanceSize <= 50000):
self.__getInstanceParameters(Strategy.Alpha,instanceSize)
elif(instanceSize <= 100000):
self.__getInstanceParameters(Strategy.Beta,instanceSize)
elif (instanceSize <=500000):
self.__getInstanceParameters(Strategy.Delta,instanceSize)
else:
self.__getInstanceParameters(Strategy.Epsilon,instanceSize)
def __getInstanceParameters(self,strategy,instanceSize):
if strategy == Strategy.Alpha:
self.__AlphaSetup(instanceSize)
elif strategy == Strategy.Beta:
self.__BetaSetup(instanceSize)
elif strategy == Strategy.Delta:
self.__DeltaSetup(instanceSize)
elif strategy == Strategy.Epsilon:
self.__EpsilonSetup(instanceSize)
def __DefaultSetup(self,instanceSize):
self.params = {}
self.params["improvementType"] = ImprovementType.First
self.params["executionTimeLimit"] = Util.getTimeInSeconds(4,50,0) #4 hours and 30 minutes of time limit
self.params["noImprovementIterationLimit"] = 2
self.params["mipTimeLimit"] = Util.getTimeInSeconds(4,0,0)
self.params["strategy"] = Strategy.Default
self.params["paradigm"] = SolvingParadigm.MIP
self.params["initial_facilities_subproblem"] = 5 #Maximum desired number of facilities 'in' the first cluster
self.params["initialSolutionFunction"] = InitialSolutionFunction.Euclidean
self.params["mipSolver"] = MipSolver.CPLEX
def __AlphaSetup(self,instanceSize):
self.__DefaultSetup(instanceSize)
self.params["strategy"] = Strategy.Alpha
self.params["paradigm"] = SolvingParadigm.MIP
self.params["quantile_intervals"] = self.__getQuantilesIntervals()
def __BetaSetup(self,instanceSize):
self.__DefaultSetup(instanceSize)
self.params["strategy"] = Strategy.Beta
self.params["paradigm"] = SolvingParadigm.Hybrid
self.params["improvementType"] = ImprovementType.First
self.params["initial_facilities_subproblem"] = 5
self.params["quantile_intervals"] = self.__getQuantilesIntervals()
def __DeltaSetup(self,instanceSize):
self.__DefaultSetup(instanceSize)
self.params["strategy"] = Strategy.Delta
self.params["paradigm"] = SolvingParadigm.Hybrid
self.params["improvementType"] = ImprovementType.First
self.params["initial_facilities_subproblem"] = 10
self.params["quantile_intervals"] = self.__getQuantilesIntervals()
def __EpsilonSetup(self,instanceSize):
self.__DefaultSetup(instanceSize)
self.params["strategy"] = Strategy.Epsilon
self.params["paradigm"] = SolvingParadigm.Hybrid
self.params["improvementType"] = ImprovementType.First
self.params["initial_facilities_subproblem"] = 5
self.params["quantile_intervals"] = self.__getQuantilesIntervals()