@@ -634,6 +634,58 @@ function test_objective_broadcasted_tanh()
634634 return
635635end
636636
637+ function test_objective_broadcasted_pow_vector ()
638+ model = ArrayDiff. Model ()
639+ x1 = MOI. VariableIndex (1 )
640+ x2 = MOI. VariableIndex (2 )
641+ ArrayDiff. set_objective (model, :(sum ([$ x1, $ x2] .^ 2 )))
642+ evaluator = ArrayDiff. Evaluator (model, ArrayDiff. Mode (), [x1, x2])
643+ MOI. initialize (evaluator, [:Grad ])
644+ x1v = 3.0
645+ x2v = - 4.0
646+ @test MOI. eval_objective (evaluator, [x1v, x2v]) == x1v^ 2 + x2v^ 2
647+ g = ones (2 )
648+ MOI. eval_objective_gradient (evaluator, g, [x1v, x2v])
649+ @test g == [2 * x1v, 2 * x2v]
650+ return
651+ end
652+
653+ function test_objective_broadcasted_pow_matrix_with_constant ()
654+ model = ArrayDiff. Model ()
655+ x1 = MOI. VariableIndex (1 )
656+ x2 = MOI. VariableIndex (2 )
657+ x3 = MOI. VariableIndex (3 )
658+ x4 = MOI. VariableIndex (4 )
659+ ArrayDiff. set_objective (
660+ model,
661+ :(sum (([$ x1 $ x2; $ x3 $ x4] - [1 1 ; 1 1 ]) .^ 2 )),
662+ )
663+ evaluator = ArrayDiff. Evaluator (model, ArrayDiff. Mode (), [x1, x2, x3, x4])
664+ MOI. initialize (evaluator, [:Grad ])
665+ xs = [1.0 , 2.0 , 3.0 , 4.0 ]
666+ @test MOI. eval_objective (evaluator, xs) ==
667+ (1 - 1 )^ 2 + (2 - 1 )^ 2 + (3 - 1 )^ 2 + (4 - 1 )^ 2
668+ g = ones (4 )
669+ MOI. eval_objective_gradient (evaluator, g, xs)
670+ @test g == [2 * (1 - 1 ), 2 * (2 - 1 ), 2 * (3 - 1 ), 2 * (4 - 1 )]
671+ return
672+ end
673+
674+ function test_objective_broadcasted_pow_cubed ()
675+ model = ArrayDiff. Model ()
676+ x1 = MOI. VariableIndex (1 )
677+ x2 = MOI. VariableIndex (2 )
678+ ArrayDiff. set_objective (model, :(sum ([$ x1, $ x2] .^ 3 )))
679+ evaluator = ArrayDiff. Evaluator (model, ArrayDiff. Mode (), [x1, x2])
680+ MOI. initialize (evaluator, [:Grad ])
681+ xs = [2.0 , 3.0 ]
682+ @test MOI. eval_objective (evaluator, xs) ≈ 2.0 ^ 3 + 3.0 ^ 3
683+ g = ones (2 )
684+ MOI. eval_objective_gradient (evaluator, g, xs)
685+ @test g ≈ [3 * 2.0 ^ 2 , 3 * 3.0 ^ 2 ]
686+ return
687+ end
688+
637689end # module
638690
639691TestArrayDiff. runtests ()
0 commit comments