russcip icon indicating copy to clipboard operation
russcip copied to clipboard

Any plan to add SCIPcreateExprPow ?

Open youngzhaozju opened this issue 10 months ago • 5 comments

Hey, I want to use the function of "SCIPcreateExprPow". It is not available currently.

Therefore, I want to add it by my self.

pub(crate) fn create_pow_expr( &mut self, base: &Variable, exponent: f64, ) -> Result<Expr, Retcode> { let mut expr_ptr = MaybeUninit::uninit(); scip_call! { ffi::SCIPcreateExprPow( self.raw, expr_ptr.as_mut_ptr(), base.raw as *mut _, exponent, None, std::ptr::null_mut(), ) };

    let expr_ptr = unsafe { expr_ptr.assume_init() };
    Ok(Expr { raw: expr_ptr })
}

pub fn add_pow_expr(&mut self, base: &Variable, exponent: f64) -> Rc<Expr> { let exp = self .scip .create_pow_expr(base, exponent) .expect("Failed to create express power in state ProblemCreated"); let exp_rc = Rc::new(exp); return exp_rc; }

Here is an example to utilize it,

// Create model let mut model = Model::new() .hide_output() .include_default_plugins() .create_prob("test") .set_obj_sense(ObjSense::Maximize);

  // Add variables
  let x1 = model.add_var(0., f64::INFINITY, 3., "x1", VarType::Integer);
  let xx = model.add_pow_expr(&x1, 2.0);

  model.add_cons(
    vec![x1.clone(), **xx.clone()**],
    &[2., 1.],
    -f64::INFINITY,
    100.,
    "c1",
);

I found that I cannot utilize it in model.add_cons . Is any suggestion?

Thank you! Young

youngzhaozju avatar Apr 12 '24 12:04 youngzhaozju