public static bool AddDel(int nCns, int nVars, int nResolves) { Timer timer = new Timer(); double ineqProb = 0.12; int maxVars = 3; Console.WriteLine("starting timing test. nCns = " + nCns + ", nVars = " + nVars + ", nResolves = " + nResolves); timer.Start(); ClSimplexSolver solver = new ClSimplexSolver(); ClVariable[] rgpclv = new ClVariable[nVars]; for (int i = 0; i < nVars; i++) { rgpclv[i] = new ClVariable(i, "x"); solver.AddStay(rgpclv[i]); } ClConstraint[] rgpcns = new ClConstraint[nCns]; int nvs = 0; int k; int j; double coeff; for (j = 0; j < nCns; j++) { // number of variables in this constraint nvs = RandomInRange(1, maxVars); ClLinearExpression expr = new ClLinearExpression(UniformRandomDiscretized() * 20.0 - 10.0); for (k = 0; k < nvs; k++) { coeff = UniformRandomDiscretized() * 10 - 5; int iclv = (int)(UniformRandomDiscretized() * nVars); expr.AddExpression(Cl.Times(rgpclv[iclv], coeff)); } if (UniformRandomDiscretized() < ineqProb) { rgpcns[j] = new ClLinearInequality(expr); } else { rgpcns[j] = new ClLinearEquation(expr); } if (Trace) { TracePrint("Constraint " + j + " is " + rgpcns[j]); } } Console.WriteLine("done building data structures"); Console.WriteLine("time = " + timer.ElapsedTime); timer.Start(); int cExceptions = 0; for (j = 0; j < nCns; j++) { // add the constraint -- if it's incompatible, just ignore it try { solver.AddConstraint(rgpcns[j]); } catch (ExClRequiredFailure) { cExceptions++; if (Trace) { TracePrint("got exception adding " + rgpcns[j]); } rgpcns[j] = null; } } Console.WriteLine("done adding constraints [" + cExceptions + " exceptions]"); Console.WriteLine("time = " + timer.ElapsedTime + "\n"); timer.Start(); int e1Index = (int)(UniformRandomDiscretized() * nVars); int e2Index = (int)(UniformRandomDiscretized() * nVars); Console.WriteLine("indices " + e1Index + ", " + e2Index); ClEditConstraint edit1 = new ClEditConstraint(rgpclv[e1Index], ClStrength.Strong); ClEditConstraint edit2 = new ClEditConstraint(rgpclv[e2Index], ClStrength.Strong); solver .AddConstraint(edit1) .AddConstraint(edit2); Console.WriteLine("done creating edit constraints -- about to start resolves"); Console.WriteLine("time = " + timer.ElapsedTime + "\n"); timer.Start(); for (int m = 0; m < nResolves; m++) { solver.Resolve(rgpclv[e1Index].Value * 1.001, rgpclv[e2Index].Value * 1.001); } Console.WriteLine("done resolves -- now removing constraints"); Console.WriteLine("time = " + timer.ElapsedTime + "\n"); solver.RemoveConstraint(edit1); solver.RemoveConstraint(edit2); timer.Start(); for (j = 0; j < nCns; j++) { if (rgpcns[j] != null) { solver.RemoveConstraint(rgpcns[j]); } } Console.WriteLine("done removing constraints and AddDel timing test"); Console.WriteLine("time = " + timer.ElapsedTime + "\n"); timer.Start(); return(true); }
public void AddDel() { const int nCns = 450; const int nVars = 450; const int nResolves = 5000; var timer = new Stopwatch(); const double ineqProb = 0.12; const int maxVars = 3; Console.WriteLine("starting timing test. nCns = " + nCns + ", nVars = " + nVars + ", nResolves = " + nResolves); timer.Start(); var rgpclv = new ClVariable[nVars]; for (var i = 0; i < nVars; i++) { rgpclv[i] = new ClVariable(i, "x"); _solver.AddStay(rgpclv[i]); } var rgpcns = new ClConstraint[nCns]; int j; for (j = 0; j < nCns; j++) { // number of variables in this constraint var nvs = RandomInRange(1, maxVars); var expr = new ClLinearExpression(UniformRandomDiscretized() * 20.0 - 10.0); int k; for (k = 0; k < nvs; k++) { var coeff = UniformRandomDiscretized() * 10 - 5; var iclv = (int)(UniformRandomDiscretized() * nVars); expr.AddExpression(Cl.Times(rgpclv[iclv], coeff)); } if (UniformRandomDiscretized() < ineqProb) { rgpcns[j] = new ClLinearInequality(expr); } else { rgpcns[j] = new ClLinearEquation(expr); } } Console.WriteLine("done building data structures"); Console.WriteLine("time = " + timer.Elapsed); timer.Start(); var cExceptions = 0; for (j = 0; j < nCns; j++) { // add the constraint -- if it's incompatible, just ignore it try { _solver.AddConstraint(rgpcns[j]); } catch (CassowaryRequiredFailureException) { cExceptions++; rgpcns[j] = null; } } Console.WriteLine("done adding constraints [" + cExceptions + " exceptions]"); Console.WriteLine("time = " + timer.Elapsed + "\n"); timer.Start(); var e1Index = (int)(UniformRandomDiscretized() * nVars); var e2Index = (int)(UniformRandomDiscretized() * nVars); Console.WriteLine("indices " + e1Index + ", " + e2Index); var edit1 = new ClEditConstraint(rgpclv[e1Index], ClStrength.Strong); var edit2 = new ClEditConstraint(rgpclv[e2Index], ClStrength.Strong); _solver .AddConstraint(edit1) .AddConstraint(edit2); Console.WriteLine("done creating edit constraints -- about to start resolves"); Console.WriteLine("time = " + timer.Elapsed + "\n"); timer.Start(); //for (var m = 0; m < nResolves; m++) //{ // _solver.Resolve(rgpclv[e1Index].Value * 1.001, // rgpclv[e2Index].Value * 1.001); //} Console.WriteLine("done resolves -- now removing constraints"); Console.WriteLine("time = " + timer.Elapsed + "\n"); _solver.RemoveConstraint(edit1); _solver.RemoveConstraint(edit2); timer.Start(); for (j = 0; j < nCns; j++) { if (rgpcns[j] != null) { _solver.RemoveConstraint(rgpcns[j]); } } Console.WriteLine("done removing constraints and AddDel timing test"); Console.WriteLine("time = " + timer.Elapsed + "\n"); timer.Start(); }