Optapy Error "return SolverFactory.create(solver_config) TypeError: Unable to convert"



我正在做一个不透明的项目,我在求解阶段得到这个错误。

optapyoptaplanner_api_wrappers.py", line 310, in solver_factory_create
return SolverFactory.create(solver_config)
TypeError: Unable to convert

可以在这里找到我的domain.py文件和main.py文件domain.py

#I defined the problem facts here
@planning_solution
class ReservationTable:
def __init__(self, timeslot_list, seat_list, reservation_list, employee_list, score = None):
self.timeslot_list = timeslot_list
self.seat_list = seat_list
self.reservation_list = reservation_list
self.employee_list = employee_list
self.score = score

@problem_fact_collection_property(Timeslot)
@value_range_provider('timeslotRange')
def get_timeslot_list(self):
return self.timeslot_list
@problem_fact_collection_property(Seat)
@value_range_provider('seatRange')
def get_seat_range(self):
return self.seat_list
@problem_fact_collection_property(Employee)
@value_range_provider('employeeRange')
def get_seat_list(self):
return self.employee_list

@planning_entity_collection_property(Reservation)
def get_reservation_list(self):
return self.reservation_list

@planning_score(HardSoftScore)
def get_score(self):
return self.score
def set_score(self, newScore):
self.score = newScore


def generate_problem():
#I created here an example of data
return ReservationTable(timeslot_list, seat_list, reservation_list, employee_list)

main.py

solver_config = optapy.config.solver.SolverConfig() 
.withEntityClasses(Reservation) 
.withSolutionClass(ReservationTable) 
.withConstraintProviderClass(define_constraints) 
.withTerminationSpentLimit(Duration.ofSeconds(30))
solver_factory = solver_factory_create(solver_config)
solver = solver_factory.buildSolver()
solution = solver.solve(generate_problem())
print(solution)
有人对这个问题有什么想法吗?谢谢你

问题在于您的@constraint_provider(问题中未显示)。当试图将defined_constraints返回的列表转换为Constraintlist时,会产生错误。特别是,@constraint_provider必须返回由constraint_factory参数生成的Constraint列表。例如:

from optapy import constraint_provider
from optapy.score import HardSoftScore
from optapy.constraint import Joiners
from domain import Employee, Reservation
@constraint_provider
def define_constraints(constraint_factory):
return [
constraint_factory.for_each(Employee)
.if_not_exists(Reservation, Joiners.equal(lambda employee: employee.name, lambda reservation: reservation.employee.name))
.penalize('Employee not assigned', HardSoftScore.ONE_HARD)
]

相关内容

最新更新