1+ # Copyright (c) 2017: Miles Lubin and contributors
2+ # Copyright (c) 2017: Google Inc.
3+ #
4+ # Use of this source code is governed by an MIT-style license that can be found
5+ # in the LICENSE.md file or at https://opensource.org/licenses/MIT.
6+
7+ module TestObjectiveNonlinearize
8+
9+ using Test
10+
11+ import MathOptInterface as MOI
12+
13+ function runtests ()
14+ for name in names (@__MODULE__ ; all = true )
15+ if startswith (" $(name) " , " test_" )
16+ @testset " $(name) " begin
17+ getfield (@__MODULE__ , name)()
18+ end
19+ end
20+ end
21+ return
22+ end
23+
24+ include (" ../utilities.jl" )
25+
26+ function test_solve_singlevariable_obj ()
27+ mock = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
28+ model = MOI. Bridges. Objective. Nonlinearize {Float64} (mock)
29+ MOI. Utilities. set_mock_optimize! (
30+ mock,
31+ (mock:: MOI.Utilities.MockOptimizer ) ->
32+ MOI. Utilities. mock_optimize! (mock, [1.0 ], MOI. FEASIBLE_POINT),
33+ )
34+ MOI. Test. test_objective_ObjectiveFunction_duplicate_terms (
35+ model,
36+ MOI. Test. Config (;exclude = Any[MOI. DualObjectiveValue, MOI. ConstraintDual, ]),
37+ )
38+ @test MOI. get (mock, MOI. ObjectiveFunctionType ()) ==
39+ MOI. ScalarNonlinearFunction
40+ @test MOI. get (model, MOI. ObjectiveFunctionType ()) ==
41+ MOI. ScalarAffineFunction{Float64}
42+ @test MOI. get (mock, MOI. ObjectiveSense ()) == MOI. MIN_SENSE
43+ @test MOI. get (model, MOI. ObjectiveSense ()) == MOI. MIN_SENSE
44+ vis = MOI. get (model, MOI. ListOfVariableIndices ())
45+ func = 3.0 * vis[1 ] + 0.0
46+
47+ @test MOI. get (
48+ model,
49+ MOI. ObjectiveFunction {MOI.ScalarAffineFunction{Float64}} (),
50+ ) ≈ func
51+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
52+ @test MOI. get (mock, MOI. ObjectiveSense ()) == MOI. MAX_SENSE
53+ @test MOI. get (model, MOI. ObjectiveSense ()) == MOI. MAX_SENSE
54+
55+ _test_delete_objective (model, 1 , tuple ())
56+ return
57+ end
58+
59+ function test_solve_result_index ()
60+ mock = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
61+ model = MOI. Bridges. Objective. Nonlinearize {Float64} (mock)
62+ MOI. Utilities. set_mock_optimize! (
63+ mock,
64+ (mock:: MOI.Utilities.MockOptimizer ) -> MOI. Utilities. mock_optimize! (
65+ mock,
66+ MOI. OPTIMAL,
67+ (MOI. FEASIBLE_POINT, [1.0 ]),
68+ MOI. FEASIBLE_POINT,
69+ (MOI. VariableIndex, MOI. GreaterThan{Float64}) => [1.0 ],
70+ ),
71+ )
72+ MOI. Test. test_solve_result_index (model, MOI. Test. Config (;exclude = Any[MOI. DualObjectiveValue, MOI. ConstraintDual, ]))
73+
74+ return
75+ end
76+
77+ function test_runtests ()
78+ MOI. Bridges. runtests (
79+ MOI. Bridges. Objective. NonlinearizeBridge,
80+ model -> begin
81+ x = MOI. add_variable (model)
82+ aff = MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 ], [x]), 1.0 )
83+ MOI. set (model, MOI. ObjectiveFunction {MOI.ScalarAffineFunction{Float64}} (), aff)
84+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
85+ end ,
86+ model -> begin
87+ x = MOI. add_variable (model)
88+ exp = MOI. ScalarNonlinearFunction (:+ , [MOI. ScalarNonlinearFunction (:* , [2.0 , MOI. VariableIndex (1 )]), 1.0 ])
89+ MOI. set (model, MOI. ObjectiveFunction {MOI.ScalarNonlinearFunction} (), exp)
90+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
91+ end ,
92+ )
93+ MOI. Bridges. runtests (
94+ MOI. Bridges. Objective. NonlinearizeBridge,
95+ model -> begin
96+ x = MOI. add_variable (model)
97+ aff = MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 ], [x]), 1.0 )
98+ MOI. set (model, MOI. ObjectiveFunction {MOI.ScalarAffineFunction{Float64}} (), aff)
99+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
100+ end ,
101+ model -> begin
102+ x = MOI. add_variable (model)
103+ exp = MOI. ScalarNonlinearFunction (:+ , [MOI. ScalarNonlinearFunction (:* , [2.0 , MOI. VariableIndex (1 )]), 1.0 ])
104+ MOI. set (model, MOI. ObjectiveFunction {MOI.ScalarNonlinearFunction} (), exp)
105+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
106+ end ,
107+ )
108+ return
109+ end
110+
111+ end # module
112+
113+ TestObjectiveNonlinearize. runtests ()
0 commit comments