russcip
russcip copied to clipboard
Any plan to add SCIPcreateExprPow ?
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