diff --git a/HWconstrained.jl/Manifest.toml b/HWconstrained.jl/Manifest.toml new file mode 100644 index 0000000..6efe2b4 --- /dev/null +++ b/HWconstrained.jl/Manifest.toml @@ -0,0 +1,308 @@ +# This file is machine-generated - editing it directly is not advised + +[[Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[BinDeps]] +deps = ["Compat", "Libdl", "SHA", "URIParser"] +git-tree-sha1 = "12093ca6cdd0ee547c39b1870e0c9c3f154d9ca9" +uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" +version = "0.8.10" + +[[BinaryProvider]] +deps = ["Libdl", "Pkg", "SHA", "Test"] +git-tree-sha1 = "055eb2690182ebc31087859c3dd8598371d3ef9e" +uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232" +version = "0.5.3" + +[[CMake]] +deps = ["BinDeps", "Libdl", "Test"] +git-tree-sha1 = "6e39bef3cbb8321e8a464b18a5c20d7cef813938" +uuid = "631607c0-34d2-5d66-819e-eb0f9aa2061a" +version = "1.1.1" + +[[CMakeWrapper]] +deps = ["BinDeps", "CMake", "Libdl", "Parameters", "Test"] +git-tree-sha1 = "2b43d451639984e3571951cc687b8509b0a86c6d" +uuid = "d5fb7624-851a-54ee-a528-d3f3bac0b4a0" +version = "0.2.2" + +[[Calculus]] +deps = ["Compat"] +git-tree-sha1 = "f60954495a7afcee4136f78d1d60350abd37a409" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.4.1" + +[[CategoricalArrays]] +deps = ["Compat", "Future", "Missings", "Printf", "Reexport", "Requires"] +git-tree-sha1 = "94d16e77dfacc59f6d6c1361866906dbb65b6f6b" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.5.2" + +[[CodecZlib]] +deps = ["BinaryProvider", "Libdl", "Test", "TranscodingStreams"] +git-tree-sha1 = "36bbf5374c661054d41410dc53ff752972583b9b" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.5.2" + +[[CommonSubexpressions]] +deps = ["Test"] +git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.2.0" + +[[Compat]] +deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] +git-tree-sha1 = "84aa74986c5b9b898b0d1acaf3258741ee64754f" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "2.1.0" + +[[DataFrames]] +deps = ["CategoricalArrays", "CodecZlib", "Compat", "DataStreams", "Dates", "InteractiveUtils", "IteratorInterfaceExtensions", "LinearAlgebra", "Missings", "Printf", "Random", "Reexport", "SortingAlgorithms", "Statistics", "StatsBase", "TableTraits", "Tables", "Test", "TranscodingStreams", "Unicode", "WeakRefStrings"] +git-tree-sha1 = "9cfed75401d25d281076eb5d82de148ac2933f9e" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "0.17.1" + +[[DataStreams]] +deps = ["Dates", "Missings", "Test", "WeakRefStrings"] +git-tree-sha1 = "69c72a1beb4fc79490c361635664e13c8e4a9548" +uuid = "9a8bc11e-79be-5b39-94d7-1ccc349a1a85" +version = "0.4.1" + +[[DataStructures]] +deps = ["InteractiveUtils", "OrderedCollections", "Random", "Serialization", "Test"] +git-tree-sha1 = "ca971f03e146cf144a9e2f2ce59674f5bf0e8038" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.15.0" + +[[Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[DiffResults]] +deps = ["Compat", "StaticArrays"] +git-tree-sha1 = "34a4a1e8be7bc99bc9c611b895b5baf37a80584c" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "0.0.4" + +[[DiffRules]] +deps = ["Random", "Test"] +git-tree-sha1 = "dc0869fb2f5b23466b32ea799bd82c76480167f7" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "0.0.10" + +[[Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "InteractiveUtils", "LinearAlgebra", "NaNMath", "Random", "SparseArrays", "SpecialFunctions", "StaticArrays", "Test"] +git-tree-sha1 = "4c4d727f1b7e0092134fabfab6396b8945c1ea5b" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.3" + +[[Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[Ipopt]] +deps = ["BinaryProvider", "Compat", "Libdl", "MathOptInterface", "MathProgBase"] +git-tree-sha1 = "da2baaaf4b7ad386aab321c678028ddcc87ef348" +uuid = "b6b21f68-93f8-5de0-b562-5493be1d77c9" +version = "0.5.4" + +[[IteratorInterfaceExtensions]] +deps = ["Test"] +git-tree-sha1 = "5484e5ede2a4137b9643f4d646e8e7b87b794415" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "0.1.1" + +[[JuMP]] +deps = ["Calculus", "DataStructures", "ForwardDiff", "LinearAlgebra", "MathOptInterface", "NaNMath", "Random", "SparseArrays", "Statistics", "Test"] +git-tree-sha1 = "db9f08540c1a23269acbae5d520c79f4722899f4" +uuid = "4076af6c-e467-56ae-b986-b466b2749572" +version = "0.19.0" + +[[LibGit2]] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[LinearAlgebra]] +deps = ["Libdl"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[MathOptInterface]] +deps = ["Compat", "Unicode"] +git-tree-sha1 = "5d3de69c9220610d0336ab45d3eb8b6ac7a7c807" +uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +version = "0.8.4" + +[[MathProgBase]] +deps = ["Compat"] +git-tree-sha1 = "3bf2e534e635df810e5f4b4f1a8b6de9004a0d53" +uuid = "fdba3010-5040-5b88-9595-932c9decdf73" +version = "0.7.7" + +[[Missings]] +deps = ["Dates", "InteractiveUtils", "SparseArrays", "Test"] +git-tree-sha1 = "d1d2585677f2bd93a97cfeb8faa7a0de0f982042" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "0.4.0" + +[[Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[NLopt]] +deps = ["BinaryProvider", "CMakeWrapper", "Libdl", "MathProgBase", "Test"] +git-tree-sha1 = "b46237debcacd4fed7bbeb31200667a75b90384f" +uuid = "76087f3c-5699-56af-9a33-bf431cd00edd" +version = "0.5.1" + +[[NaNMath]] +deps = ["Compat"] +git-tree-sha1 = "ce3b85e484a5d4c71dd5316215069311135fa9f2" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "0.3.2" + +[[OrderedCollections]] +deps = ["Random", "Serialization", "Test"] +git-tree-sha1 = "85619a3f3e17bb4761fe1b1fd47f0e979f964d5b" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.0.2" + +[[Parameters]] +deps = ["Markdown", "OrderedCollections", "REPL", "Test"] +git-tree-sha1 = "70bdbfb2bceabb15345c0b54be4544813b3444e4" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.10.3" + +[[Pkg]] +deps = ["Dates", "LibGit2", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" + +[[Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[Random]] +deps = ["Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[Reexport]] +deps = ["Pkg"] +git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "0.2.0" + +[[Requires]] +deps = ["Test"] +git-tree-sha1 = "f6fbf4ba64d295e146e49e021207993b6b48c7d1" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "0.5.2" + +[[SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" + +[[Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[SortingAlgorithms]] +deps = ["DataStructures", "Random", "Test"] +git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "0.3.1" + +[[SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[SpecialFunctions]] +deps = ["BinDeps", "BinaryProvider", "Libdl", "Test"] +git-tree-sha1 = "0b45dc2e45ed77f445617b99ff2adf0f5b0f23ea" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "0.7.2" + +[[StaticArrays]] +deps = ["InteractiveUtils", "LinearAlgebra", "Random", "Statistics", "Test"] +git-tree-sha1 = "3841b39ed5f047db1162627bf5f80a9cd3e39ae2" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "0.10.3" + +[[Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[StatsBase]] +deps = ["DataStructures", "DelimitedFiles", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "Test"] +git-tree-sha1 = "435707791dc85a67d98d671c1c3fcf1b20b00f94" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.29.0" + +[[TableTraits]] +deps = ["IteratorInterfaceExtensions", "Test"] +git-tree-sha1 = "eba4b1d0a82bdd773307d652c6e5f8c82104c676" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "0.4.1" + +[[Tables]] +deps = ["IteratorInterfaceExtensions", "LinearAlgebra", "Requires", "TableTraits", "Test"] +git-tree-sha1 = "719d5be11e89ae29d79b469c4238b63b53544d38" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "0.1.18" + +[[Test]] +deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[TranscodingStreams]] +deps = ["Pkg", "Random", "Test"] +git-tree-sha1 = "f42956022d8084539f1d7219f632542b0ea686ce" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.3" + +[[URIParser]] +deps = ["Test", "Unicode"] +git-tree-sha1 = "6ddf8244220dfda2f17539fa8c9de20d6c575b69" +uuid = "30578b45-9adc-5946-b283-645ec420af67" +version = "0.4.0" + +[[UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[WeakRefStrings]] +deps = ["Missings", "Random", "Test"] +git-tree-sha1 = "960639a12ffd223ee463e93392aeb260fa325566" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "0.5.8" diff --git a/HWconstrained.jl/Project.toml b/HWconstrained.jl/Project.toml new file mode 100644 index 0000000..1505f2c --- /dev/null +++ b/HWconstrained.jl/Project.toml @@ -0,0 +1,6 @@ +[deps] +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" +JuMP = "4076af6c-e467-56ae-b986-b466b2749572" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +NLopt = "76087f3c-5699-56af-9a33-bf431cd00edd" diff --git a/src/HWconstrained.jl b/src/HWconstrained.jl index 3b6faa4..b8399fc 100644 --- a/src/HWconstrained.jl +++ b/src/HWconstrained.jl @@ -8,20 +8,23 @@ greet() = print("Hello World!") export data, table_NLopt, table_JuMP function data(a=0.5) - - - - - - - - - - return Dict("a"=>a,"na"=>na,"nc"=>nc,"ns"=>ns,"nss"=>nss,"e"=>e,"p"=>p,"z"=>z,"pi"=>pi) + z2 = [0.72, 0.92, 1.12, 1.32] + z3 = [0.86, 0.96, 1.06, 1.16] + z = [[1.0, z2[i],z3[j]] for i in 1:4 for j in 1:4] + e = [2, 0, 0] + + return Dict("e"=>e,"z"=>z) end function max_JuMP(a=0.5) + d = data(a) + m = Model(with_optimizer(Ipopt.Optimizer)) + @variable(m, 0 <= c) + @variable(m, omega[1:3]) + @NLconstraint(m, 0 == c + sum(omega[i] - d["e"][i] for i in 1:3)) + @NLobjective(m, Max, -exp(-a*c) + sum(-exp(-a*sum(d["z"][j][i] * omega[i] for i in 1:3)) / 16 for j in 1:16)) + JuMP.optimize!(m) return Dict("obj"=>objective_value(m),"c"=>value(c),"omegas"=>[value(omega[i]) for i in 1:length(omega)]) end @@ -39,66 +42,37 @@ greet() = print("Hello World!") return d end - - - - - - function obj(x::Vector,grad::Vector,data::Dict) - - - - - - - - - - - - - - - - - - - - - - - - + a = data["a"] + z = data["z"] + if length(grad) > 0 + grad[1] = -a * exp(-a * x[1]) + grad[2] = -sum(a * exp(-a * z[i][2] * sum(z[i]' * x[2:4])) for i in 1:16)/16 + grad[3] = -sum(a * exp(-a * z[i][3] * sum(z[i]' * x[2:4])) for i in 1:16)/16 + grad[4] = -sum(a * exp(-a * z[i][4] * sum(z[i]' * x[2:4])) for i in 1:16)/16 + end + return exp(-a * x[1]) + sum(exp(-a * z[i]' * x[2:4]) for i in 1:16)/16 + end function constr(x::Vector,grad::Vector,data::Dict) - - - - - - - - - - - - - - + if length(grad) > 0 + grad[1:4] = 1 + end + return x[1] + sum(x[2:4] - data["e"]) + end function max_NLopt(a=0.5) - - - - - - - - + d = data(a) + opt = Opt(:LD_MMA, 4) + lower_bounds!(opt, [0., -Inf, -Inf, -Inf]) + xtol_rel!(opt,1e-2) + min_objective!(opt, (x,grad) -> obj(x, grad, d)) + inequality_constraint!(opt, (x, grad) -> constr(x, grad, d)) + return NLopt.optimize(opt, zeros(4)) + end function table_NLopt() diff --git a/test/runtests.jl b/test/runtests.jl index 1793ffc..32dbd68 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -3,24 +3,25 @@ using Test @testset "HWconstrained.jl" begin @testset "testing components" begin + z = data["z"] @testset "tests gradient of objective function" begin - - - - - - + a = 0.5 + obj(x) = exp(-a * x[1]) + sum(exp(-a * z[i]' * x[2:4]) for i in 1:16)/16 + gradient = [-a * exp(-a * x[1]), + -sum(a * exp(-a * z[i][2] * sum(z[i]' * x[2:4])) for i in 1:16)/16, + -sum(a * exp(-a * z[i][3] * sum(z[i]' * x[2:4])) for i in 1:16)/16, + -sum(a * exp(-a * z[i][4] * sum(z[i]' * x[2:4])) for i in 1:16)/16] + @test gradient = + end @testset "tests gradient of constraint function" begin - - - - - - + cons = x[1] + sum(x[2:4] - data["e"]) + gradcon = ones(4) + @test gradcon = + end end