Skip to content

Commit

Permalink
Adjusting Params
Browse files Browse the repository at this point in the history
  • Loading branch information
gabriel301 committed Oct 31, 2019
1 parent 957ddb8 commit ea36f94
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 15 deletions.
2 changes: 0 additions & 2 deletions Week 6 - Facility Location/facility/LNS.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,12 +341,10 @@ def optimize(self):
print("====================================================")
if(quantilesCount >= quantileSize):
print("Maximum Iteration Count Reached! Stopping...")
input("...")
break

if(noImprovementIterations > self.params["noImprovementIterationLimit"]):
print("No improvement limit reached! Stopping the search...")
input("...")
break

##filtrar as facilities mais interessantes e jogar no facility subset
Expand Down
16 changes: 8 additions & 8 deletions Week 6 - Facility Location/facility/MIP.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ def optimize(self,timeLimit):

def __createModelSCIP(self):
self.model = Model(self.instanceName)
print("Creating Variables...")
print("SCIP - Creating Variables...")
#Variables
for f in self.facilities:
self.varFacilityAssignment[f.index] = self.model.addVar(vtype="B",name="facility-%s" % f.index)
for c in self.customers:
#Demand is binary because each customer must be served by exaclty one facility
self.varCustomerAssignment[f.index,c.index] = self.model.addVar(vtype="B",name="demand-(%s,%s)" % (f.index,c.index))

print("Creating Constraints...")
print("SCIP - Creating Constraints...")
#Constraints
#Ensure all customers are assigned to one facility
for customer in self.customers:
Expand All @@ -63,22 +63,22 @@ def __createModelSCIP(self):
self.model.addCons(self.varCustomerAssignment[facility.index,customer.index] <= facility.capacity*self.varFacilityAssignment[facility.index],"Strong(%s,%s)"%(facility.index,customer.index))
self.model.addCons(self.varCustomerAssignment[facility.index,customer.index] >= 0 )

print("Creating Objective Function...")
print("SCIP - Creating Objective Function...")
#Objective Function
self.model.setObjective(quicksum(self.varFacilityAssignment[facility.index]*facility.setup_cost for facility in self.facilities) + quicksum(Preprocessing.getEuclideanDistance(facility.location,customer.location)*self.varCustomerAssignment[facility.index,customer.index] for facility in self.facilities for customer in self.customers),"minimize")
self.model.data = self.varFacilityAssignment, self.varCustomerAssignment

def __createModelCPLEX(self):
self.model = cpx.Model(self.instanceName)
print("Creating Variables...")
print("CPLEX - Creating Variables...")
#Variables
for f in self.facilities:
self.varFacilityAssignment[f.index] = self.model.binary_var(name="facility-%s" % f.index)
for c in self.customers:
#Demand is binary because each customer must be served by exaclty one facility
self.varCustomerAssignment[f.index,c.index] = self.model.binary_var(name="demand-(%s,%s)" % (f.index,c.index))

print("Creating Constraints...")
print("CPLEX - Creating Constraints...")
#Constraints
#Ensure all customers are assigned to one facility
for customer in self.customers:
Expand All @@ -94,7 +94,7 @@ def __createModelCPLEX(self):
self.model.add_constraint(ct=self.varCustomerAssignment[facility.index,customer.index] <= facility.capacity*self.varFacilityAssignment[facility.index],ctname="Strong(%s,%s)"%(facility.index,customer.index))
self.model.add_constraint(self.varCustomerAssignment[facility.index,customer.index] >= 0,ctname="Strong2(%s,%s)"%(facility.index,customer.index))

print("Creating Objective Function...")
print("CLPEX - Creating Objective Function...")
#Objective Function
objective = self.model.sum(self.varFacilityAssignment[facility.index]*facility.setup_cost for facility in self.facilities) + self.model.sum(Preprocessing.getEuclideanDistance(facility.location,customer.location)*self.varCustomerAssignment[facility.index,customer.index] for facility in self.facilities for customer in self.customers)
self.model.minimize(objective)
Expand All @@ -108,7 +108,7 @@ def __optimizeCPLEX(self,timeLimit):
self.model.parameters.timelimit = timeLimit
self.model.parameters.threads = 8

print("MIP - Optimizing...")
print("CPLEX - Optimizing...")
solution = self.model.solve(log_output=self.DEBUG_MESSAGES)

if solution is not None:
Expand Down Expand Up @@ -138,7 +138,7 @@ def __optimizeSCIP(self,timeLimit):

self.model.setRealParam('limits/time', timeLimit)

print("MIP - Optimizing...")
print("SCIP - Optimizing...")
self.model.optimize()
print("Instace: %s solved." % self.instanceName)
EPS = 1.e-6
Expand Down
24 changes: 19 additions & 5 deletions Week 6 - Facility Location/facility/ParametersConfiguration.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
import datetime

class ParametersConfiguration:
INITIAL_FACILITIES_BY_SUBPROBLEM = 5 #Maximum desired number of facilities 'in' the first cluster


def __init__(self,facilityCount,instanceSize):
self.instanceSize = instanceSize
self.facilityCount = facilityCount
Expand All @@ -14,7 +13,7 @@ def __init__(self,facilityCount,instanceSize):


def __getQuantilesIntervals(self):
firstQuantile = Util.truncate(self.INITIAL_FACILITIES_BY_SUBPROBLEM/float(self.facilityCount),10)
firstQuantile = Util.truncate(self.params["initial_facilities_subproblem"]/float(self.facilityCount),10)
if(firstQuantile > 1.0):
firstQuantile = 1
quantileIntervals = round(1.0/firstQuantile)
Expand All @@ -39,14 +38,18 @@ def __setStrategyParameters(self,instanceSize):
if(self.params is None):
if (instanceSize <= 50000):
self.__getInstanceParameters(Strategy.Alpha,instanceSize)
else:
elif(instanceSize <= 100000):
self.__getInstanceParameters(Strategy.Beta,instanceSize)
else:
self.__getInstanceParameters(Strategy.Delta,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)

def __DefaultSetup(self,instanceSize):
self.params = {}
Expand All @@ -56,18 +59,29 @@ def __DefaultSetup(self,instanceSize):
self.params["mipTimeLimit"] = Util.getTimeInSeconds(4,0,0)
self.params["strategy"] = Strategy.Default
self.params["paradigm"] = SolvingParadigm.MIP
self.params["quantile_intervals"] = self.__getQuantilesIntervals()
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["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()

0 comments on commit ea36f94

Please sign in to comment.