diff --git a/Manifest.toml b/Manifest.toml index 3fc48f8..401e890 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,582 +1,602 @@ # This file is machine-generated - editing it directly is not advised -[[ASL_jll]] +julia_version = "1.7.3" +manifest_format = "2.0" + +[[deps.ASL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "6252039f98492252f9e47c312c8ffda0e3b9e78d" uuid = "ae81ac8f-d209-56e5-92de-9978fef736f9" version = "0.1.3+0" -[[ArgTools]] +[[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -[[Artifacts]] +[[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" -[[Base64]] +[[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -[[BenchmarkTools]] +[[deps.BenchmarkTools]] deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] git-tree-sha1 = "4c10eee4af024676200bc7752e536f858c6b8f93" uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" version = "1.3.1" -[[Bzip2_jll]] +[[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.8+0" -[[CSV]] +[[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings"] git-tree-sha1 = "873fb188a4b9d76549b81465b1f75c82aaf59238" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" version = "0.10.4" -[[Cbc]] +[[deps.Cbc]] deps = ["Cbc_jll", "MathOptInterface", "SparseArrays"] git-tree-sha1 = "558876c20597e6b66f2bbd68ec0a8a434451f5b1" uuid = "9961bab8-2fa3-5c5a-9d89-47fab24efd76" version = "1.0.1" -[[Cbc_jll]] +[[deps.Cbc_jll]] deps = ["ASL_jll", "Artifacts", "Cgl_jll", "Clp_jll", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Osi_jll", "Pkg"] git-tree-sha1 = "a3c5986d7713bce4260d9826deead060a17c8e2d" uuid = "38041ee0-ae04-5750-a4d2-bb4d0d83d27d" version = "200.1000.501+0" -[[Cgl_jll]] +[[deps.Cgl_jll]] deps = ["Artifacts", "Clp_jll", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Osi_jll", "Pkg"] git-tree-sha1 = "11eb7b7688925e9751b5d7a187aaa4291eae2664" uuid = "3830e938-1dd0-5f3e-8b8e-b3ee43226782" version = "0.6000.300+0" -[[ChainRulesCore]] +[[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "80ca332f6dcb2508adba68f22f551adb2d00a624" +git-tree-sha1 = "8a494fe0c4ae21047f28eb48ac968f0b8a6fcaa7" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.3" +version = "1.15.4" -[[ChangesOfVariables]] +[[deps.ChangesOfVariables]] deps = ["ChainRulesCore", "LinearAlgebra", "Test"] git-tree-sha1 = "38f7a08f19d8810338d4f5085211c7dfa5d5bdd8" uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" version = "0.1.4" -[[Clp]] +[[deps.Clp]] deps = ["Clp_jll", "MathOptInterface"] git-tree-sha1 = "3d8cd8fecd362f16e34d430a7125eae42050e635" uuid = "e2554f3b-3117-50c0-817c-e040a3ddf72d" version = "1.0.1" -[[Clp_jll]] +[[deps.Clp_jll]] deps = ["Artifacts", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "MUMPS_seq_jll", "OpenBLAS32_jll", "Osi_jll", "Pkg"] git-tree-sha1 = "b1031dcfbb44553194c9e650feb5ab65e372504f" uuid = "06985876-5285-5a41-9fcb-8948a742cc53" version = "100.1700.601+0" -[[CodecBzip2]] +[[deps.CodecBzip2]] deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" version = "0.7.2" -[[CodecZlib]] +[[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.0" -[[CoinUtils_jll]] +[[deps.CoinUtils_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] git-tree-sha1 = "44173e61256f32918c6c132fc41f772bab1fb6d1" uuid = "be027038-0da8-5614-b30d-e42594cb92df" version = "200.1100.400+0" -[[CommonSubexpressions]] +[[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" -[[Compat]] +[[deps.Compat]] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] -git-tree-sha1 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" +git-tree-sha1 = "78bee250c6826e1cf805a88b7f1e86025275d208" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.45.0" +version = "3.46.0" -[[CompilerSupportLibraries_jll]] +[[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -[[Conda]] +[[deps.Conda]] deps = ["Downloads", "JSON", "VersionParsing"] git-tree-sha1 = "6e47d11ea2776bc5627421d59cdcc1296c058071" uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" version = "1.7.0" -[[Crayons]] +[[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" version = "4.1.1" -[[DataAPI]] +[[deps.DataAPI]] git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.10.0" -[[DataFrames]] +[[deps.DataFrames]] deps = ["Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] git-tree-sha1 = "daa21eb85147f72e41f6352a57fccea377e310a9" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" version = "1.3.4" -[[DataStructures]] +[[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" version = "0.18.13" -[[DataValueInterfaces]] +[[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" version = "1.0.0" -[[Dates]] +[[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -[[DelimitedFiles]] +[[deps.DelimitedFiles]] deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" -[[DiffResults]] +[[deps.DiffResults]] deps = ["StaticArrays"] git-tree-sha1 = "c18e98cba888c6c25d1c3b048e4b3380ca956805" uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" version = "1.0.3" -[[DiffRules]] +[[deps.DiffRules]] deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "28d605d9a0ac17118fe2c5e9ce0fbb76c3ceb120" +git-tree-sha1 = "992a23afdb109d0d2f8802a30cf5ae4b1fe7ea68" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.11.0" +version = "1.11.1" -[[Distributed]] +[[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -[[DocStringExtensions]] +[[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "5158c2b41018c5f7eb1470d558127ac274eca0c9" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" version = "0.9.1" -[[Downloads]] -deps = ["ArgTools", "LibCURL", "NetworkOptions"] +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -[[ExprTools]] +[[deps.ExprTools]] git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" version = "0.1.8" -[[FileIO]] +[[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] git-tree-sha1 = "94f5101b96d2d968ace56f7f2db19d0a5f592e28" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" version = "1.15.0" -[[FilePathsBase]] +[[deps.FilePathsBase]] deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] -git-tree-sha1 = "129b104185df66e408edd6625d480b7f9e9823a0" +git-tree-sha1 = "316daa94fad0b7a008ebd573e002efd6609d85ac" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" -version = "0.9.18" +version = "0.9.19" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -[[Formatting]] +[[deps.Formatting]] deps = ["Printf"] git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" -[[ForwardDiff]] +[[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] git-tree-sha1 = "187198a4ed8ccd7b5d99c41b69c679269ea2b2d4" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.32" -[[Future]] +[[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -[[InlineStrings]] +[[deps.InlineStrings]] deps = ["Parsers"] git-tree-sha1 = "d19f9edd8c34760dca2de2b503f969d8700ed288" uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" version = "1.1.4" -[[InteractiveUtils]] +[[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -[[InverseFunctions]] +[[deps.InverseFunctions]] deps = ["Test"] git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" version = "0.1.7" -[[InvertedIndices]] +[[deps.InvertedIndices]] git-tree-sha1 = "bee5f1ef5bf65df56bdd2e40447590b272a5471f" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" version = "1.1.0" -[[IrrationalConstants]] +[[deps.IrrationalConstants]] git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.1.1" -[[IteratorInterfaceExtensions]] +[[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" -[[JLD2]] +[[deps.JLD2]] deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "TranscodingStreams", "UUIDs"] git-tree-sha1 = "81b9477b49402b47fbe7f7ae0b252077f53e4a08" uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" version = "0.4.22" -[[JLLWrappers]] +[[deps.JLLWrappers]] deps = ["Preferences"] git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.4.1" -[[JSON]] +[[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.3" -[[JuMP]] +[[deps.JuMP]] deps = ["LinearAlgebra", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "Printf", "SparseArrays"] -git-tree-sha1 = "b0a3d727bb2ab8e327fa29d97914f84f1b0257b9" +git-tree-sha1 = "906e2325c22ba8aaed432677d0a8d5cf24c9ea9e" uuid = "4076af6c-e467-56ae-b986-b466b2749572" -version = "1.2.0" +version = "1.3.0" -[[LazyArtifacts]] +[[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -[[LibCURL]] +[[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -[[LibCURL_jll]] +[[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -[[LibGit2]] +[[deps.LibGit2]] deps = ["Base64", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" -[[LibSSH2_jll]] +[[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -[[Libdl]] +[[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -[[LinearAlgebra]] -deps = ["Libdl"] +[[deps.LinearAlgebra]] +deps = ["Libdl", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -[[LogExpFunctions]] +[[deps.LogExpFunctions]] deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "361c2b088575b07946508f135ac556751240091c" +git-tree-sha1 = "94d9c52ca447e23eac0c0f074effbcd38830deb5" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.17" +version = "0.3.18" -[[Logging]] +[[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" -[[METIS_jll]] +[[deps.METIS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "1d31872bb9c5e7ec1f618e8c4a56c8b0d9bddc7e" uuid = "d00139f3-1899-568f-a2f0-47f597d42d70" version = "5.1.1+0" -[[MUMPS_seq_jll]] +[[deps.MUMPS_seq_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "OpenBLAS32_jll", "Pkg"] git-tree-sha1 = "29de2841fa5aefe615dea179fcde48bb87b58f57" uuid = "d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d" version = "5.4.1+0" -[[MacroTools]] +[[deps.MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.9" -[[Markdown]] +[[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -[[MathOptInterface]] +[[deps.MathOptInterface]] deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] -git-tree-sha1 = "b79f525737702ff2a3f2005a0823e3518ce8b04c" +git-tree-sha1 = "3256d773b0b807e478194c3e3451b8c5e27caf55" uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" -version = "1.7.0" +version = "1.8.0" -[[MbedTLS_jll]] +[[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -[[Missings]] +[[deps.Missings]] deps = ["DataAPI"] git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" version = "1.0.2" -[[Mmap]] +[[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" -[[MozillaCACerts_jll]] +[[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -[[MutableArithmetics]] +[[deps.MutableArithmetics]] deps = ["LinearAlgebra", "SparseArrays", "Test"] git-tree-sha1 = "4e675d6e9ec02061800d6cfb695812becbd03cdf" uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" version = "1.0.4" -[[NaNMath]] +[[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "a7c3d1da1189a1c2fe843a3bfa04d18d20eb3211" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.0.1" -[[NetworkOptions]] +[[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -[[OpenBLAS32_jll]] +[[deps.OpenBLAS32_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ba4a8f683303c9082e84afba96f25af3c7fb2436" +git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.12+1" +version = "0.3.17+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -[[OpenLibm_jll]] +[[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -[[OpenSpecFun_jll]] +[[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" -[[OrderedCollections]] +[[deps.OrderedCollections]] git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.4.1" -[[Osi_jll]] +[[deps.Osi_jll]] deps = ["Artifacts", "CoinUtils_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] git-tree-sha1 = "28e0ddebd069f605ab1988ab396f239a3ac9b561" uuid = "7da25872-d9ce-5375-a4d3-7a845f58efdd" version = "0.10800.600+0" -[[PackageCompiler]] +[[deps.PackageCompiler]] deps = ["Artifacts", "LazyArtifacts", "Libdl", "Pkg", "Printf", "RelocatableFolders", "TOML", "UUIDs"] git-tree-sha1 = "c497e2bb9c2127a411b74dbff56b11f258d67d12" uuid = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d" version = "2.0.9" -[[Parsers]] +[[deps.Parsers]] deps = ["Dates"] -git-tree-sha1 = "0044b23da09b5608b4ecacb4e5e6c6332f833a7e" +git-tree-sha1 = "3d5bf43e3e8b412656404ed9466f1dcbf7c50269" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.3.2" +version = "2.4.0" -[[Pkg]] +[[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -[[PooledArrays]] +[[deps.PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7" uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" version = "1.4.2" -[[Preferences]] +[[deps.Preferences]] deps = ["TOML"] git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.3.0" -[[PrettyTables]] +[[deps.PrettyTables]] deps = ["Crayons", "Formatting", "Markdown", "Reexport", "Tables"] git-tree-sha1 = "dfb54c4e414caa595a1f2ed759b160f5a3ddcba5" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" version = "1.3.1" -[[Printf]] +[[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -[[Profile]] +[[deps.Profile]] deps = ["Printf"] uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" -[[PyCall]] +[[deps.ProgressBars]] +deps = ["Printf"] +git-tree-sha1 = "806ebc92e1b4b4f72192369a28dfcaf688566b2b" +uuid = "49802e3a-d2f1-5c88-81d8-b72133a6f568" +version = "1.4.1" + +[[deps.PyCall]] deps = ["Conda", "Dates", "Libdl", "LinearAlgebra", "MacroTools", "Serialization", "VersionParsing"] -git-tree-sha1 = "1fc929f47d7c151c839c5fc1375929766fb8edcc" +git-tree-sha1 = "53b8b07b721b77144a0fbbbc2675222ebf40a02d" uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" -version = "1.93.1" +version = "1.94.1" -[[REPL]] +[[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" -[[Random]] -deps = ["Serialization"] +[[deps.Random]] +deps = ["SHA", "Serialization"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -[[Reexport]] +[[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" -[[RelocatableFolders]] +[[deps.RelocatableFolders]] deps = ["SHA", "Scratch"] git-tree-sha1 = "cdbd3b1338c72ce29d9584fdbe9e9b70eeb5adca" uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" version = "0.1.3" -[[Requires]] +[[deps.Requires]] deps = ["UUIDs"] git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" -[[SHA]] +[[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -[[Scratch]] +[[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd" uuid = "6c6a2e73-6563-6170-7368-637461726353" version = "1.1.1" -[[SentinelArrays]] +[[deps.SentinelArrays]] deps = ["Dates", "Random"] git-tree-sha1 = "db8481cf5d6278a121184809e9eb1628943c7704" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" version = "1.3.13" -[[Serialization]] +[[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -[[SharedArrays]] +[[deps.SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" -[[Sockets]] +[[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -[[SortingAlgorithms]] +[[deps.SortingAlgorithms]] deps = ["DataStructures"] git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.0.1" -[[SparseArrays]] +[[deps.SparseArrays]] deps = ["LinearAlgebra", "Random"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -[[SpecialFunctions]] +[[deps.SpecialFunctions]] deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "d75bda01f8c31ebb72df80a46c88b25d1c79c56d" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.1.7" -[[StaticArrays]] +[[deps.StaticArrays]] deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] -git-tree-sha1 = "8803c6dea034ab8cd988abe4a91e5589d61c7416" +git-tree-sha1 = "dfec37b90740e3b9aa5dc2613892a3fc155c3b42" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.5.4" +version = "1.5.6" -[[StaticArraysCore]] -git-tree-sha1 = "5b413a57dd3cea38497d745ce088ac8592fbb5be" +[[deps.StaticArraysCore]] +git-tree-sha1 = "ec2bd695e905a3c755b33026954b119ea17f2d22" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.1.0" +version = "1.3.0" -[[Statistics]] +[[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -[[TOML]] +[[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -[[TableTraits]] +[[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" -[[Tables]] +[[deps.Tables]] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" version = "1.7.0" -[[Tar]] +[[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -[[Test]] +[[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -[[TimerOutputs]] +[[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] git-tree-sha1 = "9dfcb767e17b0849d6aaf85997c98a5aea292513" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" version = "0.5.21" -[[TranscodingStreams]] +[[deps.TranscodingStreams]] deps = ["Random", "Test"] -git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" +git-tree-sha1 = "8a75929dcd3c38611db2f8d08546decb514fcadf" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.6" +version = "0.9.9" -[[UUIDs]] +[[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -[[Unicode]] +[[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -[[VersionParsing]] +[[deps.VersionParsing]] git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" version = "1.3.0" -[[WeakRefStrings]] +[[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" version = "1.4.2" -[[Zlib_jll]] +[[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -[[nghttp2_jll]] +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" + +[[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -[[p7zip_jll]] +[[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" diff --git a/Project.toml b/Project.toml index 7e9d66a..1038ad6 100644 --- a/Project.toml +++ b/Project.toml @@ -16,8 +16,10 @@ JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" Logging = "56ddb016-857b-54e1-b83d-db4d58db5568" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" PackageCompiler = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" +ProgressBars = "49802e3a-d2f1-5c88-81d8-b72133a6f568" PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" diff --git a/src/instance/file_instance.jl b/src/instance/file_instance.jl index b2a28f1..c1b54e2 100644 --- a/src/instance/file_instance.jl +++ b/src/instance/file_instance.jl @@ -3,6 +3,8 @@ # Released under the modified BSD license. See COPYING.md for more details. using JLD2 +using Distributed +using ProgressBars import Base: flush mutable struct FileInstance <: Instance @@ -20,8 +22,9 @@ mutable struct FileInstance <: Instance )::FileInstance instance = new(nothing, nothing, filename, nothing, build_model, mode) instance.py = PyFileInstance(instance) - if mode != "r" || isfile("$filename.h5") - instance.sample = Hdf5Sample("$filename.h5", mode = mode) + h5_filename = replace(filename, ".jld2" => ".h5") + if mode != "r" || isfile(h5_filename) + instance.sample = Hdf5Sample(h5_filename, mode = mode) end instance.filename = filename return instance @@ -107,33 +110,38 @@ function load(filename::AbstractString, build_model::Function) end end -function save(data::AbstractVector, dirname::String)::Nothing +function save(data::AbstractVector, dirname::String)::Vector{String} mkpath(dirname) + filenames = [] for (i, d) in enumerate(data) filename = joinpath(dirname, @sprintf("%06d.jld2", i)) + push!(filenames, filename) jldsave(filename, data = d) end + return filenames end -function solve!( +function fit!( solver::LearningSolver, filenames::Vector, build_model::Function; tee::Bool = false, ) - for filename in filenames - solve!(solver, filename, build_model; tee) - end + instances = [FileInstance(f, build_model) for f in filenames] + fit!(solver, instances) end -function fit!( +function solve!( solver::LearningSolver, filenames::Vector, build_model::Function; tee::Bool = false, + progress::Bool = false, ) - instances = [FileInstance(f, build_model) for f in filenames] - fit!(solver, instances) + if progress + filenames = ProgressBar(filenames) + end + return [solve!(solver, f, build_model; tee) for f in filenames] end function solve!( @@ -142,7 +150,24 @@ function solve!( build_model::Function; tee::Bool = false, ) - solve!(solver, FileInstance(filename, build_model); tee) + instance = FileInstance(filename, build_model) + stats = solve!(solver, instance; tee) + instance.sample.file.close() + return stats +end + +function parallel_solve!( + solver::LearningSolver, + filenames::Vector, + build_model::Function; + tee::Bool = false, +) + solver_filename = tempname() + save(solver_filename, solver) + @sync @distributed for filename in filenames + local_solver = load_solver(solver_filename) + solve!(local_solver, filename, build_model; tee) + end end function __init_PyFileInstance__() diff --git a/src/utils/benchmark.jl b/src/utils/benchmark.jl index e4bd7e2..a473ace 100644 --- a/src/utils/benchmark.jl +++ b/src/utils/benchmark.jl @@ -4,57 +4,60 @@ using CSV using DataFrames - - -mutable struct BenchmarkRunner - solvers::Dict - results::Union{Nothing,DataFrame} - py::PyCall.PyObject - - function BenchmarkRunner(; solvers::Dict) - return new( - solvers, - nothing, # results - miplearn.BenchmarkRunner( - Dict(sname => solver.py for (sname, solver) in solvers), - ), - ) +using OrderedCollections + +function run_benchmarks(; + optimizer, + train_instances::Vector{<:AbstractString}, + test_instances::Vector{<:AbstractString}, + build_model::Function, + progress::Bool = false, + output_filename::String, +) + solvers = OrderedDict( + "baseline" => LearningSolver(optimizer), + "ml-exact" => LearningSolver(optimizer), + "ml-heuristic" => LearningSolver(optimizer, mode="heuristic"), + ) + + #solve!(solvers["baseline"], train_instances, build_model; progress) + fit!(solvers["ml-exact"], train_instances, build_model) + fit!(solvers["ml-heuristic"], train_instances, build_model) + + stats = OrderedDict() + for (solver_name, solver) in solvers + stats[solver_name] = solve!(solver, test_instances, build_model; progress) end -end -function solve!( - runner::BenchmarkRunner, - instances::Vector{FileInstance}; - n_trials::Int = 1, -)::Nothing - instances = repeat(instances, n_trials) - for (solver_name, solver) in runner.solvers - @info "benchmark $solver_name" - stats = [ - solve!(solver, instance, discard_output = true, tee = true) for - instance in instances - ] - for (i, s) in enumerate(stats) + results = nothing + for (solver_name, solver_stats) in stats + for (i, s) in enumerate(solver_stats) s["Solver"] = solver_name - s["Instance"] = instances[i].filename + s["Instance"] = test_instances[i] s = Dict(k => isnothing(v) ? missing : v for (k, v) in s) - if runner.results === nothing - runner.results = DataFrame(s) + if results === nothing + results = DataFrame(s) else - push!(runner.results, s, cols = :union) + push!(results, s, cols = :union) end end - @info "benchmark $solver_name [done]" end + CSV.write(output_filename, results) + + # fig_filename = "$(tempname()).svg" + # df = pyimport("pandas").read_csv(csv_filename) + # miplearn.benchmark.plot(df, output=fig_filename) + # open(fig_filename) do f + # display("image/svg+xml", read(f, String)) + # end + return end -function fit!(runner::BenchmarkRunner, instances::Vector{FileInstance})::Nothing - @python_call runner.py.fit([instance.py for instance in instances]) -end - -function write_csv!(runner::BenchmarkRunner, filename::AbstractString)::Nothing - CSV.write(filename, runner.results) - return +function run_benchmarks(; solvers, instance_filenames, build_model, output_filename) + runner = BenchmarkRunner(; solvers) + instances = [FileInstance(f, build_model) for f in instance_filenames] + solve!(runner, instances) + write_csv!(runner, output_filename) end export BenchmarkRunner, solve!, fit!, write_csv! diff --git a/test/instance/file_instance_test.jl b/test/instance/file_instance_test.jl index f2bf504..e1a7cd1 100644 --- a/test/instance/file_instance_test.jl +++ b/test/instance/file_instance_test.jl @@ -9,33 +9,33 @@ using Cbc @testset "FileInstance" begin @testset "Solve (knapsack)" begin data = KnapsackData() - filename = tempname() - MIPLearn.save_data(filename, data) - instance = FileInstance(filename, build_knapsack_model) + basename = tempname() + MIPLearn.save_data("$basename.jld2", data) + instance = FileInstance("$basename.jld2", build_knapsack_model) solver = LearningSolver(Cbc.Optimizer) solve!(solver, instance) - h5 = Hdf5Sample("$filename.h5") + h5 = Hdf5Sample("$basename.h5") @test h5.get_scalar("mip_wallclock_time") > 0 end - @testset "Solve (vpm2)" begin + @testset "Solve (danoint)" begin data = Dict("filename" => joinpath(@__DIR__, "../fixtures/danoint.mps.gz")) build_model(data) = read_from_file(data["filename"]) - filename = tempname() - MIPLearn.save_data(filename, data) - instance = FileInstance(filename, build_model) + basename = tempname() + MIPLearn.save_data("$basename.jld2", data) + instance = FileInstance("$basename.jld2", build_model) solver = LearningSolver(optimizer_with_attributes(Cbc.Optimizer, "seconds" => 1.0)) solve!(solver, instance) - h5 = Hdf5Sample("$filename.h5") + h5 = Hdf5Sample("$basename.h5") @test h5.get_scalar("mip_wallclock_time") > 0 end @testset "Save and load data" begin filename = tempname() data = KnapsackData( - weights = [5.0, 5.0, 5.0], - prices = [1.0, 1.0, 1.0], - capacity = 3.0, + weights=[5.0, 5.0, 5.0], + prices=[1.0, 1.0, 1.0], + capacity=3.0, ) MIPLearn.save_data(filename, data) loaded = MIPLearn.load_data(filename) diff --git a/test/instance/jump_instance_test.jl b/test/instance/jump_instance_test.jl index c5851d1..1de54a2 100644 --- a/test/instance/jump_instance_test.jl +++ b/test/instance/jump_instance_test.jl @@ -51,12 +51,12 @@ end @testset "FileInstance" begin data = nothing - filename = tempname() - MIPLearn.save_data(filename, data) - instance = FileInstance(filename, build_model) + basename = tempname() + MIPLearn.save_data("$basename.jld2", data) + instance = FileInstance("$basename.jld2", build_model) solver = LearningSolver(Cbc.Optimizer) solve!(solver, instance) - h5 = MIPLearn.Hdf5Sample("$filename.h5") + h5 = MIPLearn.Hdf5Sample("$basename.h5") @test h5.get_array("mip_var_values") == [1.0, 0.0] end end