4 cdef public Model model
8 '''calls destructor and frees memory of Benders decomposition ''' 12 '''initializes Benders deconposition''' 16 '''calls exit method of Benders decomposition''' 20 '''informs the Benders decomposition that the presolving process is being started ''' 24 '''informs the Benders decomposition that the presolving process has been completed''' 28 '''informs Benders decomposition that the branch and bound process is being started ''' 32 '''informs Benders decomposition that the branch and bound process data is being freed''' 36 '''creates the subproblems and registers it with the Benders decomposition struct ''' 37 print(
"python error in benderscreatesub: this method needs to be implemented")
41 '''sets the pre subproblem solve callback of Benders decomposition ''' 45 '''sets convex solve callback of Benders decomposition''' 49 '''sets solve callback of Benders decomposition ''' 52 def benderspostsolve(self, solution, enfotype, mergecandidates, npriomergecands, checkint, infeasible):
53 '''sets post-solve callback of Benders decomposition ''' 57 '''frees the subproblems''' 61 '''Returns the corresponding master or subproblem variable for the given variable. This provides a call back for the variable mapping between the master and subproblems. ''' 62 print(
"python error in bendersgetvar: this method needs to be implemented")
66 cdef Variable getPyVar(SCIP_VAR* var):
67 cdef SCIP_VARDATA* vardata
69 return <Variable>vardata
72 cdef SCIP_RETCODE PyBendersCopy (SCIP* scip, SCIP_BENDERS* benders):
75 cdef SCIP_RETCODE PyBendersFree (SCIP* scip, SCIP_BENDERS* benders):
76 cdef SCIP_BENDERSDATA* bendersdata
78 PyBenders = <Benders>bendersdata
79 PyBenders.bendersfree()
83 cdef SCIP_RETCODE PyBendersInit (SCIP* scip, SCIP_BENDERS* benders):
84 cdef SCIP_BENDERSDATA* bendersdata
86 PyBenders = <Benders>bendersdata
87 PyBenders.bendersinit()
90 cdef SCIP_RETCODE PyBendersExit (SCIP* scip, SCIP_BENDERS* benders):
91 cdef SCIP_BENDERSDATA* bendersdata
93 PyBenders = <Benders>bendersdata
94 PyBenders.bendersexit()
97 cdef SCIP_RETCODE PyBendersInitpre (SCIP* scip, SCIP_BENDERS* benders):
98 cdef SCIP_BENDERSDATA* bendersdata
100 PyBenders = <Benders>bendersdata
101 PyBenders.bendersinitpre()
104 cdef SCIP_RETCODE PyBendersExitpre (SCIP* scip, SCIP_BENDERS* benders):
105 cdef SCIP_BENDERSDATA* bendersdata
107 PyBenders = <Benders>bendersdata
108 PyBenders.bendersexitpre()
111 cdef SCIP_RETCODE PyBendersInitsol (SCIP* scip, SCIP_BENDERS* benders):
112 cdef SCIP_BENDERSDATA* bendersdata
114 PyBenders = <Benders>bendersdata
115 PyBenders.bendersinitsol()
118 cdef SCIP_RETCODE PyBendersExitsol (SCIP* scip, SCIP_BENDERS* benders):
119 cdef SCIP_BENDERSDATA* bendersdata
121 PyBenders = <Benders>bendersdata
122 PyBenders.bendersexitsol()
125 cdef SCIP_RETCODE PyBendersCreatesub (SCIP* scip, SCIP_BENDERS* benders, int probnumber):
126 cdef SCIP_BENDERSDATA* bendersdata
128 PyBenders = <Benders>bendersdata
129 PyBenders.benderscreatesub(probnumber)
132 cdef SCIP_RETCODE PyBendersPresubsolve (SCIP* scip, SCIP_BENDERS* benders, SCIP_SOL* sol, SCIP_BENDERSENFOTYPE type, SCIP_Bool checkint, SCIP_Bool* skipsolve, SCIP_RESULT* result):
133 cdef SCIP_BENDERSDATA* bendersdata
135 PyBenders = <Benders>bendersdata
139 solution = Solution()
142 result_dict = PyBenders.benderspresubsolve(solution, enfotype, checkint)
143 skipsolve[0] = result_dict.get(
"skipsolve",
False)
144 result[0] = result_dict.get(
"result", <SCIP_RESULT>result[0])
147 cdef SCIP_RETCODE PyBendersSolvesubconvex (SCIP* scip, SCIP_BENDERS* benders, SCIP_SOL* sol, int probnumber, SCIP_Bool onlyconvex, SCIP_Real* objective, SCIP_RESULT* result):
148 cdef SCIP_BENDERSDATA* bendersdata
150 PyBenders = <Benders>bendersdata
154 solution = Solution()
156 result_dict = PyBenders.benderssolvesubconvex(solution, probnumber, onlyconvex)
157 objective[0] = result_dict.get(
"objective", 1e+20)
158 result[0] = result_dict.get(
"result", <SCIP_RESULT>result[0])
161 cdef SCIP_RETCODE PyBendersSolvesub (SCIP* scip, SCIP_BENDERS* benders, SCIP_SOL* sol, int probnumber, SCIP_Real* objective, SCIP_RESULT* result):
162 cdef SCIP_BENDERSDATA* bendersdata
164 PyBenders = <Benders>bendersdata
168 solution = Solution()
170 result_dict = PyBenders.benderssolvesub(solution, probnumber)
171 objective[0] = result_dict.get(
"objective", 1e+20)
172 result[0] = result_dict.get(
"result", <SCIP_RESULT>result[0])
175 cdef SCIP_RETCODE PyBendersPostsolve (SCIP* scip, SCIP_BENDERS* benders, SCIP_SOL* sol,
176 SCIP_BENDERSENFOTYPE type, int* mergecands, int npriomergecands, int nmergecands, SCIP_Bool checkint,
177 SCIP_Bool infeasible, SCIP_Bool* merged):
178 cdef SCIP_BENDERSDATA* bendersdata
180 PyBenders = <Benders>bendersdata
184 solution = Solution()
188 for i
in range(nmergecands):
189 mergecandidates.append(mergecands[i])
190 result_dict = PyBenders.benderspostsolve(solution, enfotype, mergecandidates, npriomergecands, checkint, infeasible)
191 merged[0] = result_dict.get(
"merged",
False)
194 cdef SCIP_RETCODE PyBendersFreesub (SCIP* scip, SCIP_BENDERS* benders, int probnumber):
195 cdef SCIP_BENDERSDATA* bendersdata
197 PyBenders = <Benders>bendersdata
198 PyBenders.bendersfreesub(probnumber)
202 cdef SCIP_RETCODE PyBendersGetvar (SCIP* scip, SCIP_BENDERS* benders, SCIP_VAR* var, SCIP_VAR** mappedvar, int probnumber):
203 cdef SCIP_BENDERSDATA* bendersdata
205 PyBenders = <Benders>bendersdata
206 PyVar = getPyVar(var)
207 result_dict = PyBenders.bendersgetvar(PyVar, probnumber)
208 mappedvariable = <Variable>(result_dict.get(
"mappedvar",
None))
209 if mappedvariable
is None:
212 mappedvar[0] = mappedvariable.var
def benderssolvesub(self, solution, probnumber)
def benderspresubsolve(self, solution, enfotype, checkint)
def bendersgetvar(self, variable, probnumber)
def benderspostsolve(self, solution, enfotype, mergecandidates, npriomergecands, checkint, infeasible)
SCIP_BENDERSDATA * SCIPbendersGetData(SCIP_BENDERS *benders)
def benderssolvesubconvex(self, solution, probnumber, onlyconvex)
SCIP_VARDATA * SCIPvarGetData(SCIP_VAR *var)
def bendersfreesub(self, probnumber)
def benderscreatesub(self, probnumber)