use crate::DType;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use crate::optimize::error::OptimizeResult;
#[derive(Debug, Clone)]
pub struct SdpOptions {
pub max_iter: usize,
pub tol: f64,
}
impl Default for SdpOptions {
fn default() -> Self {
Self {
max_iter: 200,
tol: 1e-8,
}
}
}
#[derive(Debug, Clone)]
pub struct SdpResult<R: Runtime<DType = DType>> {
pub x: Tensor<R>,
pub fun: f64,
pub dual: Tensor<R>,
pub iterations: usize,
pub converged: bool,
}
pub trait SdpAlgorithms<R: Runtime<DType = DType>> {
fn solve_sdp(
&self,
c_mat: &Tensor<R>,
a_mats: &[Tensor<R>],
b_vec: &Tensor<R>,
options: &SdpOptions,
) -> OptimizeResult<SdpResult<R>>;
}