private static void Poly1() { Random rnd = new Random(0); for (int i = 0; i < 10000000; ++i) { double a = rnd.Next(-10, 10); double b = rnd.Next(-10, 10); double c = rnd.Next(-10, 10); a = 2; b = 8; c = 8; Solver s = new Solver(-1000000, 1000000); FltVar x = new FltVar(s, "x"); FltVarExpr exp = a * x * x + b * x; s.Add(exp); s.Add(exp == -c); s.PrintConstraints(); s.PrintVariables(); Console.Out.WriteLine("{0}.x^2 + {1}.x + {2} = 0", a, b, c); s.Solve(new FltGenerate(s, new FltVar[] { x })); Console.Out.WriteLine(x.ToString(true)); while (s.Next()) { Console.Out.WriteLine(x.ToString(true)); } } }
public FltGenerate( Solver solver, FltVar[] list ) : base(solver) { m_FltVarList = list; m_SelectVar = FltVarSelector.CardinalityMin; m_Search = new FltSearchDichotomize(); }
public FltGenerate( Solver solver, FltVar[] list, FltVarSelector.Select select, FltSearch search ) : base(solver) { m_FltVarList = list; m_SelectVar = select; m_Search = search; }
public override void Execute() { FltVar var = m_SelectVar(m_FltVarList); if (!ReferenceEquals(var, null)) { Add(new GoalAnd(m_Search.Create(var), this)); } }
public FltVar[] Copy(FltVar[] other) { FltVar[] copy = new FltVar[other.Length]; for (int idx = 0; idx < other.Length; ++idx) { copy[idx] = m_FltVarList[other[idx].Index]; } return(copy); }
public void Test() { Solver solver = new Solver(-100, 100); FltVar a = new FltVar(solver, 5, 10, "a"); FltVarNeg neg = -a; FltVar b = neg.Var0; solver.Add(neg); solver.Propagate(); Assert.AreEqual(b.Domain, new FltDomain(-10, -5)); }
public void Test() { Solver solver = new Solver(-1000, 1000); FltVar i0 = new FltVar(solver, 0, 10); FltVar i1 = new FltVar(solver, 10, 20); FltVar i2 = new FltVar(solver, 20, 30); FltVar s = new FltVar(solver, 30, 60); FltVarList list = new FltVarList(solver, new FltVar[] { i0, i1, i2 }); FltVarListSum sum = list.Sum(); solver.Add(sum); solver.Propagate(); Assert.AreEqual(s.Domain, sum.Var0.Domain); }
static public FltVar CardinalityMax(FltVar[] list) { FltVar chosenVar = null; for (int idx = 0; idx < list.Length; ++idx) { FltVar var = list[idx]; if (!var.IsBound() && !var.IsEmpty() && (ReferenceEquals(chosenVar, null) || (chosenVar.Domain.Cardinality < var.Domain.Cardinality))) { chosenVar = var; } } return(chosenVar); }
public static FltVar CardinalityMin( FltVar[] list ) { FltVar chosenVar = null; for( int idx = 0; idx < list.Length; ++idx ) { FltVar var = list[ idx ]; if( !var.IsBound() && !var.IsEmpty() && ( ReferenceEquals( chosenVar, null ) || ( chosenVar.Domain.Cardinality > var.Domain.Cardinality ) ) ) { chosenVar = var; } } return chosenVar; }
static public FltVar MostConstrained(FltVar[] list) { FltVar chosenVar = null; for (int idx = 0; idx < list.Length; ++idx) { FltVar var = list[idx]; if (!var.IsBound() && !var.IsEmpty() && (ReferenceEquals(chosenVar, null) || chosenVar.ConstraintList.Count < var.ConstraintList.Count)) { chosenVar = var; } } return(chosenVar); }
public void Test() { Solver solver = new Solver(-1000, 1000); FltVar a = new FltVar(solver, -10, -5, "a"); FltVar b = new FltVar(solver, -1, 1, "b"); FltVar c = new FltVar(solver, 5, 10, "c"); FltVarList list = new FltVarList(solver, new FltVar[] { a, b, c }); IntVar index = new IntVar(solver); FltVarListIndex cons = list.At(index); FltVar result = cons.Var0; solver.Add(cons); solver.Propagate(); result.Intersect(-8, 8); result.Difference(-2, 6); cons.Index.Difference(1); }
public static double Min( FltVar var ) { return var.Min; }
public static double Mid( FltVar var ) { return ( var.Min + var.Max ) / 2; }
public static double Max( FltVar var ) { return var.Max; }
static public double Mid(FltVar var) { return((var.Min + var.Max) / 2); }
public FltSearchGoalInstantiateBest( Solver solver, FltVar var, FltVarValueSelector.Select select ) : base(solver, var) { m_SelectValue = select; }
public override FltSearchGoal Create(FltVar var) { return(new FltSearchGoalInstantiateBest(var.Solver, var, m_SelectValue)); }
public override FltSearchGoal Create( FltVar var ) { return new FltSearchGoalDichotomize( var.Solver, var ); }
public static FltVar MostConstrained( FltVar[] list ) { FltVar chosenVar = null; for( int idx = 0; idx < list.Length; ++idx ) { FltVar var = list[ idx ]; if( !var.IsBound() && !var.IsEmpty() && ( ReferenceEquals( chosenVar, null ) || chosenVar.ConstraintList.Count < var.ConstraintList.Count ) ) { chosenVar = var; } } return chosenVar; }
static public double Max(FltVar var) { return(var.Max); }
protected FltSearchGoal(Solver solver, FltVar var) : base(solver) { m_FltVar = var; }
public abstract FltSearchGoal Create(FltVar var);
public FltSearchGoalDichotomize( Solver solver, FltVar var ) : base(solver, var) { }
public static FltVar FirstNotBound( FltVar[] list ) { int idx; for( idx = 0; idx < list.Length && ( list[ idx ].IsBound() || list[ idx ].IsEmpty() ); ++idx ) {}; return ( idx < list.Length ) ? list[ idx ] : null; }
static public double Min(FltVar var) { return(var.Min); }
public override FltSearchGoal Create(FltVar var) { return(new FltSearchGoalDichotomize(var.Solver, var)); }
public FltSearchGoalInstantiateBest(Solver solver, FltVar var, FltVarValueSelector.Select select) : base(solver, var) { m_SelectValue = select; }
public FltSearchGoalDichotomize(Solver solver, FltVar var) : base(solver, var) { }
public override FltSearchGoal Create( FltVar var ) { return new FltSearchGoalInstantiateBest( var.Solver, var, m_SelectValue ); }
public FltVarCmpEqualIntVar Equals(FltVar v) { return(new FltVarCmpEqualIntVar(this, v)); }