diff --git a/Project.toml b/Project.toml index f529a88..ae3cc07 100644 --- a/Project.toml +++ b/Project.toml @@ -4,13 +4,10 @@ authors = ["Dimitri Lozeve "] version = "0.1.0" [deps] -CPLEX = "a076750e-1247-5638-91d2-ce28b192dca0" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -JuMP = "4076af6c-e467-56ae-b986-b466b2749572" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Logging = "56ddb016-857b-54e1-b83d-db4d58db5568" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" diff --git a/src/GardenOptim.jl b/src/GardenOptim.jl index 187f36c..800f3d8 100644 --- a/src/GardenOptim.jl +++ b/src/GardenOptim.jl @@ -17,7 +17,6 @@ export update!, fillgardenrandomly!, gardenevolution!, outputgarden include("classification.jl") include("loaddata.jl") include("mcmc.jl") -include("optim.jl") "Save the garden to a CSV file." function outputgarden(garden::Matrix{Int}, plants::Vector{Symbol}) diff --git a/src/optim.jl b/src/optim.jl deleted file mode 100644 index 4474ba3..0000000 --- a/src/optim.jl +++ /dev/null @@ -1,67 +0,0 @@ -using JuMP -using CPLEX - -function neighbourindices(mask::Matrix, idx::Int)::Vector{Int} - if mask[idx] == 0 - return [] - end - - m, n = size(mask) - i, j = Tuple(CartesianIndices(mask)[idx]) - indices = [(i, j-1), (i, j+1), (i-1, j), (i+1, j)] - # cells filled with 0 are not part of the garden - cartesianindices = [ - CartesianIndex(k, l) for (k, l) in indices - if 0 < k <= m && 0 < l <= n && mask[k, l] != 0 - ] - # convert to linear indices - LinearIndices(mask)[cartesianindices] -end - -function neighbourmatrix(mask::Matrix)::Matrix{Bool} - N = length(mask) - d = zeros(N, N) - for i in 1:N - for j in neighbourindices(mask, i) - d[i, j] = 1 - end - end - d -end - -function definemodel(plantcounts::Vector, garden::Matrix, mask::Matrix, costs::Matrix) - N = length(mask) - Q = size(costs, 1) - - optimizer = optimizer_with_attributes( - CPLEX.Optimizer, "CPX_PARAM_OPTIMALITYTARGET" => 2, "CPX_PARAM_EPINT" => 1e-8) - model = Model(optimizer) - - @variable(model, x[1:N, 1:Q], Bin) - - @objective( - model, - Min, - sum( - costs[q, r] * x[i, q] * x[j, r] - for i = 1:N, q = 1:Q, r = 1:Q for j = neighbourindices(mask, i) - ) - ) - - for i = 1:N - @constraint(model, sum(x[i, q] for q = 1:Q) <= 1) - if mask[i] == 0 - for q = 1:Q - @constraint(model, x[i, q] == 0) - end - end - if garden[i] != 0 - @constraint(model, x[i, garden[i]] == 1) - end - end - - for q = 1:Q - @constraint(model, sum(x[i, q] for i = 1:N) >= plantcounts[q]) - end - model -end diff --git a/test/optim.jl b/test/optim.jl deleted file mode 100644 index 1ac5d3d..0000000 --- a/test/optim.jl +++ /dev/null @@ -1,15 +0,0 @@ -using GardenOptim -using LinearAlgebra -using Test - -@testset "optim" begin - mask = zeros(Bool, 5, 7) - mask[[1, 2, 6, 7]] .= 1 - @test GardenOptim.neighbourindices(mask, 1) == [6, 2] - @test GardenOptim.neighbourindices(mask, 2) == [7, 1] - @test GardenOptim.neighbourindices(mask, 3) == [] - neighbourcount = sum([length(GardenOptim.neighbourindices(mask, i)) for i = 1:length(mask)]) - @test sum(GardenOptim.neighbourmatrix(mask)) == neighbourcount - @test issymmetric(GardenOptim.neighbourmatrix(mask)) -end - diff --git a/test/runtests.jl b/test/runtests.jl index 1e4d2f6..fbbbf55 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -3,5 +3,4 @@ using Test @testset "GardenOptim.jl" begin include("classification.jl") include("mcmc.jl") - include("optim.jl") end