extern crate flag_algebra;
use flag_algebra::*;
use flags::Graph;
use operator::Basis;
use sdp::Problem;
type V = QFlag<f64, Graph>;
#[allow(dead_code, unused_variables)]
pub fn main() {
init_default_log();
let b = Basis::new(4);
let k4: V = flag(&Graph::clique(4)).expand(b);
let triangle: V = flag(&Graph::new(3, &[(0, 1), (1, 2), (2, 0)])).expand(b);
let edge: V = flag(&Graph::new(2, &[(0, 1)])).expand(b);
let delta = 0.4;
let pb = Problem::<f64, _> {
ineqs: vec![
total_sum_is_one(b),
flags_are_nonnegative(b),
edge.equal(delta),
],
cs: b.all_cs(),
obj: -triangle + k4,
}.no_scale();
pb.write_sdpa("turan").unwrap();
println!("{} / {}", delta.powf(1.5)-delta.powf(2.), delta.powf(1.5));
let mut f = FlagSolver::new(pb, "strong").protect(0);
f.minimize2();
}