Make it optional to solve the LP relaxation first

pull/3/head
Alinson S. Xavier 5 years ago
parent 295358c553
commit db3e27b039

@ -9,12 +9,6 @@ git-tree-sha1 = "9e62e66db34540a0c919d72172cc2f642ac71260"
uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
version = "0.5.0" version = "0.5.0"
[[BinaryProvider]]
deps = ["Libdl", "SHA"]
git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c"
uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
version = "0.5.8"
[[Bzip2_jll]] [[Bzip2_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "03a44490020826950c68005cafb336e5ba08b7e8" git-tree-sha1 = "03a44490020826950c68005cafb336e5ba08b7e8"
@ -28,13 +22,13 @@ version = "0.4.1"
[[CPLEX]] [[CPLEX]]
deps = ["Libdl", "LinearAlgebra", "MathOptInterface", "MathProgBase", "SparseArrays"] deps = ["Libdl", "LinearAlgebra", "MathOptInterface", "MathProgBase", "SparseArrays"]
git-tree-sha1 = "f8dac98fbff2f7d7fe58fa1fcdbefaaaf29a1f59" git-tree-sha1 = "c3d7c4c3e4d4bd01c5ac89dee420be93ef7ef20b"
uuid = "a076750e-1247-5638-91d2-ce28b192dca0" uuid = "a076750e-1247-5638-91d2-ce28b192dca0"
version = "0.6.5" version = "0.6.6"
[[CPLEXW]] [[CPLEXW]]
deps = ["CEnum", "Libdl"] deps = ["CEnum", "Libdl"]
git-tree-sha1 = "ebad297748ee2a12cc13b5fb07f9bbfa8a900494" git-tree-sha1 = "2259e91418573278d919d6a163634a34ff1adb61"
repo-rev = "master" repo-rev = "master"
repo-url = "https://github.com/iSoron/CPLEXW.git" repo-url = "https://github.com/iSoron/CPLEXW.git"
uuid = "cfecb002-79c2-11e9-35be-cb59aa640f85" uuid = "cfecb002-79c2-11e9-35be-cb59aa640f85"
@ -48,15 +42,15 @@ version = "0.5.1"
[[CodeTracking]] [[CodeTracking]]
deps = ["InteractiveUtils", "UUIDs"] deps = ["InteractiveUtils", "UUIDs"]
git-tree-sha1 = "0becdab7e6fbbcb7b88d8de5b72e5bb2f28239f3" git-tree-sha1 = "ccc043a0df446cac279dca29d13e2827b40aceb5"
uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2"
version = "0.5.8" version = "0.5.12"
[[CodecBzip2]] [[CodecBzip2]]
deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"]
git-tree-sha1 = "2fee975d68f9a8b22187ae86e33c0829b30cf231" git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7"
uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd"
version = "0.7.1" version = "0.7.2"
[[CodecZlib]] [[CodecZlib]]
deps = ["TranscodingStreams", "Zlib_jll"] deps = ["TranscodingStreams", "Zlib_jll"]
@ -65,10 +59,10 @@ uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.0" version = "0.7.0"
[[CommonSubexpressions]] [[CommonSubexpressions]]
deps = ["Test"] deps = ["MacroTools", "Test"]
git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0" git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
version = "0.2.0" version = "0.3.0"
[[CompilerSupportLibraries_jll]] [[CompilerSupportLibraries_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
@ -84,9 +78,9 @@ version = "1.4.1"
[[DataStructures]] [[DataStructures]]
deps = ["InteractiveUtils", "OrderedCollections"] deps = ["InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "4dead20a1606a60292529023d6eac18a1ef6432e" git-tree-sha1 = "88d48e133e6d3dd68183309877eac74393daa7eb"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.17.12" version = "0.17.20"
[[Dates]] [[Dates]]
deps = ["Printf"] deps = ["Printf"]
@ -113,21 +107,21 @@ uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
[[ForwardDiff]] [[ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"]
git-tree-sha1 = "869540e4367122fbffaace383a5bdc34d6e5e5ac" git-tree-sha1 = "1d090099fb82223abc48f7ce176d3f7696ede36d"
uuid = "f6369f11-7733-5829-9624-2563aa707210" uuid = "f6369f11-7733-5829-9624-2563aa707210"
version = "0.10.10" version = "0.10.12"
[[Gurobi]] [[Gurobi]]
deps = ["Libdl", "LinearAlgebra", "MathOptInterface", "MathProgBase", "SparseArrays"] deps = ["Libdl", "LinearAlgebra", "MathOptInterface", "MathProgBase", "SparseArrays"]
git-tree-sha1 = "619f241433b5127f9561ddcdc75b2023513c76ea" git-tree-sha1 = "f36a2fa62909675681aec582ccfc4a4a629406e4"
uuid = "2e9cd046-0924-5485-92f1-d5272153d98b" uuid = "2e9cd046-0924-5485-92f1-d5272153d98b"
version = "0.7.6" version = "0.8.1"
[[HTTP]] [[HTTP]]
deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"] deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"]
git-tree-sha1 = "cd60d9a575d3b70c026d7e714212fd4ecf86b4bb" git-tree-sha1 = "2ac03263ce44be4222342bca1c51c36ce7566161"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "0.8.13" version = "0.8.17"
[[IniFile]] [[IniFile]]
deps = ["Test"] deps = ["Test"]
@ -152,22 +146,22 @@ uuid = "2535ab7d-5cd8-5a07-80ac-9b1792aadce3"
version = "0.3.2" version = "0.3.2"
[[JSONSchema]] [[JSONSchema]]
deps = ["BinaryProvider", "HTTP", "JSON"] deps = ["HTTP", "JSON", "ZipFile"]
git-tree-sha1 = "b0a7f9328967df5213691d318a03cf70ea8c76b1" git-tree-sha1 = "a9ecdbc90be216912a2e3e8a8e38dc4c93f0d065"
uuid = "7d188eb4-7ad8-530c-ae41-71a32a6d4692" uuid = "7d188eb4-7ad8-530c-ae41-71a32a6d4692"
version = "0.2.0" version = "0.3.2"
[[JuMP]] [[JuMP]]
deps = ["Calculus", "DataStructures", "ForwardDiff", "LinearAlgebra", "MathOptInterface", "MutableArithmetics", "NaNMath", "Random", "SparseArrays", "Statistics"] deps = ["Calculus", "DataStructures", "ForwardDiff", "LinearAlgebra", "MathOptInterface", "MutableArithmetics", "NaNMath", "Random", "SparseArrays", "Statistics"]
git-tree-sha1 = "84c1cf8bec4729b8b2ef4dfc4e1db1b892ad0d30" git-tree-sha1 = "cbab42e2e912109d27046aa88f02a283a9abac7c"
uuid = "4076af6c-e467-56ae-b986-b466b2749572" uuid = "4076af6c-e467-56ae-b986-b466b2749572"
version = "0.21.2" version = "0.21.3"
[[JuliaInterpreter]] [[JuliaInterpreter]]
deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"]
git-tree-sha1 = "2eadbbde5534346cbb837c3a75b377cba477a06d" git-tree-sha1 = "7b2a1b650cec61a7d8cd8ee9ee7a818b5764d502"
uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a"
version = "0.7.13" version = "0.7.26"
[[LibGit2]] [[LibGit2]]
deps = ["Printf"] deps = ["Printf"]
@ -185,9 +179,9 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
[[LoweredCodeUtils]] [[LoweredCodeUtils]]
deps = ["JuliaInterpreter"] deps = ["JuliaInterpreter"]
git-tree-sha1 = "1c41621653250b2824b6e664ac5bd805558aeff9" git-tree-sha1 = "dbd9336b43c2d6fa492efa09ba3bb10fbdbeeb64"
uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b"
version = "0.4.3" version = "0.4.9"
[[MacroTools]] [[MacroTools]]
deps = ["Markdown", "Random"] deps = ["Markdown", "Random"]
@ -201,9 +195,9 @@ uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
[[MathOptInterface]] [[MathOptInterface]]
deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "JSON", "JSONSchema", "LinearAlgebra", "MutableArithmetics", "OrderedCollections", "SparseArrays", "Test", "Unicode"] deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "JSON", "JSONSchema", "LinearAlgebra", "MutableArithmetics", "OrderedCollections", "SparseArrays", "Test", "Unicode"]
git-tree-sha1 = "27f2ef85879b8f1d144266ab44f076ba0dfbd8a1" git-tree-sha1 = "cd2049c055c7d192a235670d50faa375361624ba"
uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
version = "0.9.13" version = "0.9.14"
[[MathProgBase]] [[MathProgBase]]
deps = ["LinearAlgebra", "SparseArrays"] deps = ["LinearAlgebra", "SparseArrays"]
@ -213,29 +207,29 @@ version = "0.7.8"
[[MbedTLS]] [[MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
git-tree-sha1 = "a9e2221f06b42f56052f43ad7edecb01d0ef5ab4" git-tree-sha1 = "426a6978b03a97ceb7ead77775a1da066343ec6e"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d" uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.0.1" version = "1.0.2"
[[MbedTLS_jll]] [[MbedTLS_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "c83f5a1d038f034ad0549f9ee4d5fac3fb429e33" git-tree-sha1 = "a0cb0d489819fa7ea5f9fa84c7e7eba19d8073af"
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.16.0+2" version = "2.16.6+1"
[[Mmap]] [[Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804" uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[MutableArithmetics]] [[MutableArithmetics]]
deps = ["LinearAlgebra", "SparseArrays", "Test"] deps = ["LinearAlgebra", "SparseArrays", "Test"]
git-tree-sha1 = "e1edd618a8f39d16f8595dd622a63b25f759cf8a" git-tree-sha1 = "6cf09794783b9de2e662c4e8b60d743021e338d0"
uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
version = "0.2.9" version = "0.2.10"
[[NaNMath]] [[NaNMath]]
git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "0.3.3" version = "0.3.4"
[[OpenSpecFun_jll]] [[OpenSpecFun_jll]]
deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"]
@ -244,10 +238,9 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.3+3" version = "0.5.3+3"
[[OrderedCollections]] [[OrderedCollections]]
deps = ["Random", "Serialization", "Test"] git-tree-sha1 = "293b70ac1780f9584c89268a6e2a560d938a7065"
git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.1.0" version = "1.3.0"
[[PackageCompiler]] [[PackageCompiler]]
deps = ["Libdl", "Pkg", "UUIDs"] deps = ["Libdl", "Pkg", "UUIDs"]
@ -257,9 +250,9 @@ version = "1.2.1"
[[Parsers]] [[Parsers]]
deps = ["Dates", "Test"] deps = ["Dates", "Test"]
git-tree-sha1 = "75d07cb840c300084634b4991761886d0d762724" git-tree-sha1 = "8077624b3c450b15c087944363606a6ba12f925e"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "1.0.1" version = "1.0.10"
[[Pkg]] [[Pkg]]
deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
@ -285,9 +278,9 @@ uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[Revise]] [[Revise]]
deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"]
git-tree-sha1 = "6cefbc0e3b62146e564a3cf209e7370a839883da" git-tree-sha1 = "0992d4643e27b2deb9f2e4ec7a56b7033813a027"
uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe"
version = "2.6.0" version = "2.7.3"
[[SHA]] [[SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
@ -304,15 +297,15 @@ uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
[[SpecialFunctions]] [[SpecialFunctions]]
deps = ["OpenSpecFun_jll"] deps = ["OpenSpecFun_jll"]
git-tree-sha1 = "e19b98acb182567bcb7b75bb5d9eedf3a3b5ec6c" git-tree-sha1 = "d8d8b8a9f4119829410ecd706da4cc8594a1e020"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b" uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "0.10.0" version = "0.10.3"
[[StaticArrays]] [[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"] deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c" git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35"
uuid = "90137ffa-7385-5640-81b9-e52037218182" uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "0.12.1" version = "0.12.4"
[[Statistics]] [[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"] deps = ["LinearAlgebra", "SparseArrays"]
@ -324,9 +317,9 @@ uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[TimerOutputs]] [[TimerOutputs]]
deps = ["Printf"] deps = ["Printf"]
git-tree-sha1 = "0cc8db57cb537191b02948d4fabdc09eb7f31f98" git-tree-sha1 = "f458ca23ff80e46a630922c555d838303e4b9603"
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
version = "0.5.5" version = "0.5.6"
[[TinyBnB]] [[TinyBnB]]
deps = ["CPLEXW", "Printf", "Random", "Revise", "Test"] deps = ["CPLEXW", "Printf", "Random", "Revise", "Test"]
@ -354,6 +347,12 @@ git-tree-sha1 = "80229be1f670524750d905f8fc8148e5a8c4537f"
uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" uuid = "81def892-9a0e-5fdd-b105-ffc91e053289"
version = "1.2.0" version = "1.2.0"
[[ZipFile]]
deps = ["Libdl", "Printf", "Zlib_jll"]
git-tree-sha1 = "254975fef2fc526583bb9b7c9420fe66ffe09f2f"
uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea"
version = "0.9.2"
[[Zlib_jll]] [[Zlib_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "fdd89e5ab270ea0f2a0174bd9093e557d06d4bfa" git-tree-sha1 = "fdd89e5ab270ea0f2a0174bd9093e557d06d4bfa"

@ -137,6 +137,21 @@ function update_solution!(data::JuMPSolverData)
end end
function get_variables(data::JuMPSolverData)
var_to_basename_idx, model = data.var_to_basename_idx, data.model
variables = Dict()
for var in JuMP.all_variables(model)
var in keys(var_to_basename_idx) || continue
basename, idx = var_to_basename_idx[var]
if !haskey(variables, basename)
variables[basename] = []
end
push!(variables[basename], idx)
end
return variables
end
function set_instance!(data::JuMPSolverData, instance, model) function set_instance!(data::JuMPSolverData, instance, model)
data.instance = instance data.instance = instance
data.model = model data.model = model
@ -210,6 +225,9 @@ end
get_solution(self) = get_solution(self) =
self.data.solution self.data.solution
get_variables(self) =
get_variables(self.data)
set_time_limit(self, time_limit) = set_time_limit(self, time_limit) =
self.data.time_limit = time_limit self.data.time_limit = time_limit

@ -84,7 +84,6 @@ class GurobiSolver(InternalSolver):
} }
def solve(self, tee=False): def solve(self, tee=False):
all_vars = self.model.getVars()
self.instance.found_violated_lazy_constraints = [] self.instance.found_violated_lazy_constraints = []
self.instance.found_violated_user_cuts = [] self.instance.found_violated_user_cuts = []
streams = [StringIO()] streams = [StringIO()]
@ -136,6 +135,14 @@ class GurobiSolver(InternalSolver):
solution[varname][idx] = var.x solution[varname][idx] = var.x
return solution return solution
def get_variables(self):
variables = {}
for (varname, vardict) in self._all_vars.items():
variables[varname] = {}
for (idx, var) in vardict.items():
variables[varname] += [idx]
return variables
def add_constraint(self, constraint): def add_constraint(self, constraint):
self.model.addConstr(constraint) self.model.addConstr(constraint)

@ -150,5 +150,15 @@ class InternalSolver(ABC):
def set_gap_tolerance(self, gap_tolerance): def set_gap_tolerance(self, gap_tolerance):
pass pass
@abstractmethod
def get_variables(self):
pass
def get_empty_solution(self):
solution = {}
for (var, indices) in self.get_variables().items():
solution[var] = {}
for idx in indices:
solution[var][idx] = 0.0
return solution

@ -97,7 +97,8 @@ class LearningSolver:
instance, instance,
model=None, model=None,
tee=False, tee=False,
relaxation_only=False): relaxation_only=False,
solve_lp_first=True):
""" """
Solves the given instance. If trained machine-learning models are Solves the given instance. If trained machine-learning models are
available, they will be used to accelerate the solution process. available, they will be used to accelerate the solution process.
@ -111,9 +112,13 @@ class LearningSolver:
- instance.solution - instance.solution
- instance.found_violated_lazy_constraints - instance.found_violated_lazy_constraints
- instance.solver_log - instance.solver_log
Additional solver components may set additional properties. Please Additional solver components may set additional properties. Please
see their documentation for more details. see their documentation for more details.
If `solve_lp_first` is False, the properties lp_solution and lp_value
will be set to dummy values.
Parameters Parameters
---------- ----------
instance: miplearn.Instance instance: miplearn.Instance
@ -124,6 +129,11 @@ class LearningSolver:
If true, prints solver log to screen. If true, prints solver log to screen.
relaxation_only: bool relaxation_only: bool
If true, solve only the root LP relaxation. If true, solve only the root LP relaxation.
solve_lp_first: bool
If true, solve LP relaxation first, then solve original MILP. This
option should be activated if the LP relaxation is not very
expensive to solve and if it provides good hints for the integer
solution.
Returns Returns
------- -------
@ -145,10 +155,14 @@ class LearningSolver:
self.internal_solver = self._create_internal_solver() self.internal_solver = self._create_internal_solver()
self.internal_solver.set_instance(instance, model) self.internal_solver.set_instance(instance, model)
logger.debug("Solving LP relaxation...") if solve_lp_first:
results = self.internal_solver.solve_lp(tee=tee) logger.debug("Solving LP relaxation...")
instance.lp_solution = self.internal_solver.get_solution() results = self.internal_solver.solve_lp(tee=tee)
instance.lp_value = results["Optimal value"] instance.lp_solution = self.internal_solver.get_solution()
instance.lp_value = results["Optimal value"]
else:
instance.lp_solution = self.internal_solver.get_empty_solution()
instance.lp_value = 0.0
logger.debug("Running before_solve callbacks...") logger.debug("Running before_solve callbacks...")
for component in self.components.values(): for component in self.components.values():

@ -56,6 +56,14 @@ class BasePyomoSolver(InternalSolver):
solution[str(var)][index] = var[index].value solution[str(var)][index] = var[index].value
return solution return solution
def get_variables(self):
variables = {}
for var in self.model.component_objects(Var):
variables[str(var)] = []
for index in var:
variables[str(var)] += [index]
return variables
def set_warm_start(self, solution): def set_warm_start(self, solution):
self.clear_warm_start() self.clear_warm_start()
count_total, count_fixed = 0, 0 count_total, count_fixed = 0, 0

Loading…
Cancel
Save