Skip to content

Commit 125444d

Browse files
committed
sphere: fix bug
scaling properly by radius more tests
1 parent 757d72e commit 125444d

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/constraints/sphere2.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ impl<'a> Constraint for Sphere2<'a> {
2121
fn project(&self, x: &mut [f64]) {
2222
if let Some(center) = &self.center {
2323
let mut norm_difference = 0.0;
24-
x.iter().zip(center.iter()).for_each(|(a, b)| {
25-
let diff_ = *a - *b;
24+
x.iter().zip(center.iter()).for_each(|(xi, ci)| {
25+
let diff_ = *xi - *ci;
2626
norm_difference += diff_ * diff_
2727
});
2828
norm_difference = norm_difference.sqrt();
2929
x.iter_mut().zip(center.iter()).for_each(|(x, c)| {
30-
*x = *c + (*x - *c) / norm_difference;
30+
*x = *c + self.radius * (*x - *c) / norm_difference;
3131
});
3232
} else {
3333
let norm_x = crate::matrix_operations::norm2(x);
@@ -37,6 +37,6 @@ impl<'a> Constraint for Sphere2<'a> {
3737
}
3838

3939
fn is_convex(&self) -> bool {
40-
true
40+
false
4141
}
4242
}

src/constraints/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -765,9 +765,9 @@ fn t_ball1_random_optimality_conditions_centered() {
765765

766766
#[test]
767767
fn t_sphere2_no_center() {
768-
let radius = 1.0;
768+
let radius = 0.9;
769769
let mut x_out = [1.0, 1.0];
770-
let mut x_in = [1.0, 1.0];
770+
let mut x_in = [-0.3, -0.2];
771771
let unit_sphere = Sphere2::new(None, radius);
772772
unit_sphere.project(&mut x_out);
773773
unit_sphere.project(&mut x_in);
@@ -779,7 +779,7 @@ fn t_sphere2_no_center() {
779779

780780
#[test]
781781
fn t_sphere2_center() {
782-
let radius = 1.0;
782+
let radius = 1.3;
783783
let center = [-3.0, 5.0];
784784
let mut x = [1.0, 1.0];
785785
let unit_sphere = Sphere2::new(Some(&center), radius);

0 commit comments

Comments
 (0)