I am creating a system that takes data on drivers, potential passengers and their locations, and also tries to optimize the number of passengers who can get up with a driver with some restrictions. I am using the python constraint module, and solution variables are represented like this:
p = [(passenger, driver) for driver in drivers for passenger in passengers]
driver_set = [zip(passengers, [e1]*len(drivers)) for e1 in drivers]
passenger_set = [zip([e1]*len(passengers), drivers) for e1 in passengers]
self.problem.addVariables(p, [0,1])
So, when I print the value of p and driver_set and passenger_set, I get the following output (given the test data that I provided):
[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)] # p
[[(0, 0), (0, 1)], [(1, 0), (1, 1)], [(2, 0), (2, 1)]] # passenger_set
[[(0, 0), (1, 0)], [(0, 1), (1, 1)]] # driver_set
So, there are 3 passengers and 2 drivers: a variable (2.0) will mean that passenger 2 is in car 0 and so on. I added the following restrictions to make sure that no passenger enters more than one car and that the driver cannot have more people than seats:
for passenger in passenger_set:
self.problem.addConstraint(MaxSumConstraint(1), passenger)
for driver in driver_set:
realdriver = self.getDriverByOpId(driver[0][1])
self.problem.addConstraint(MaxSumConstraint(realdriver.numSeats), driver)
- . , , , , . , ( , driver_set), , . , :
for driver in driver_set:
self.problem.addConstraint(MaxSumConstraint(MAX_DISTANCE), [self.getRouteDistance(self.getShortestRoute(driver))])
:
KeyError: 1.8725031790578293
, python: . ?
- , , , . , , , , . ( , getRouteDistance ()), :
for driver in driver_set:
self.problem.addConstraint(lambda d: self.getRouteDistance(d) <= float(MAX_DISTANCE), driver)
(, , , .getSolutions(), ):
File "allocation.py", line 130, in buildProblem
for solution in self.problem.getSolutions():
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 236, in getSolutions
return self._solver.getSolutions(domains, constraints, vconstraints)
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 529, in getSolutions
return list(self.getSolutionIter(domains, constraints, vconstraints))
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 506, in getSolutionIter
pushdomains):
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 939, in __call__
self.forwardCheck(variables, domains, assignments)))
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 891, in forwardCheck
if not self(variables, domains, assignments):
File "/Users/wadben/Documents/Dev/Python/sp-allocation/constraint.py", line 940, in __call__
return self._func(*parms)
TypeError: <lambda>() takes exactly 1 argument (3 given)
- - ? , .