public List <List <int> > Run(SigmaTable sigmaTable, ref VectorSet nonDominatedVectors) { List <List <int> > strategies = new List <List <int> >(); foreach (Vector resultVector in nonDominatedVectors) { u = resultVector; ksi = task.Dimension; eta = task.Limit; List <int> strategy = new List <int>(); for (int i = 0; i < task.Dimension; i++) { strategy.Add(0); } while (u.X != 0 && u.Y != 0) { strategy[ksi - 1] = 1; u.X = u.X - task.FirstCriterion[ksi - 1]; u.Y = u.Y - task.SecondCriterion[ksi - 1]; if (u.X != 0 && u.Y != 0) { eta = eta - task.LimitationCoefficients[ksi - 1]; ksi = ksi - 1; FindU(sigmaTable); } } strategies.Add(strategy); } return(strategies); }
void SetSigmaTable(SigmaTable sigmaTable) { dt_SigmaTable.Columns.Add("Сигма"); foreach (var sigma in sigmaTable) { String s = "<(" + sigma.Vector.X + "," + sigma.Vector.Y + ")," + sigma.Row + "," + sigma.Column + ">"; dt_SigmaTable.Rows.Add(s); } ctrl_dg_results.ItemsSource = dt_SigmaTable.DefaultView; }
public TaskSolution Solve(DiffMethod method, double a, double b, int n) { TablesManager manager = new TablesManager(); t0Table = manager.T0Table; mTable = manager.MTable; nTable = manager.NTable; sigmaTable = manager.SigmaTable; DiffEquationSys deSys = null; switch (method) { case DiffMethod.RungeKutta: deSys = new RungeKuttaDiffEquationSys(new DiffEquationSys.SeveralArgFun[] { (x, y) => ((y[1] - (Rk + Rp(y[0])) * y[0]) / Lk), (x, y) => (-y[0] / Ck) }); break; case DiffMethod.ImplTrap: deSys = new ImplTrapDiffEquationSys(new DiffEquationSys.SeveralArgFun[] { (x, y) => ((y[1] - (Rk + Rp(y[0])) * y[0]) / Lk), (x, y) => (-y[0] / Ck) }); break; } DiffEquationSolution[] sysSolution = deSys.FindSolution(a, b, new double[] { I0, Uc0 }, n); DiffEquationSolution rpSolution = new DiffEquationSolution(a, b, n); for (int i = 0; i <= n; i++) { rpSolution.Y[i] = Rp(sysSolution[0].Y[i]); } DiffEquationSolution ucpSolution = new DiffEquationSolution(a, b, n); for (int i = 0; i <= n; i++) { ucpSolution.Y[i] = rpSolution.Y[i] * sysSolution[0].Y[i]; } TaskSolution taskSolution; taskSolution.I = sysSolution[0]; taskSolution.Uc = sysSolution[1]; taskSolution.Rp = rpSolution; taskSolution.Ucp = ucpSolution; return(taskSolution); }
public void FindU(SigmaTable sigmaTable) { foreach (Sigma sigma in sigmaTable) { if (sigma.Vector.X == u.X && sigma.Vector.Y == u.Y && sigma.Row <= ksi && sigma.Column <= eta) { this.u = sigma.Vector; this.ksi = sigma.Row; this.eta = sigma.Column; } } }
public void Run(ref VectorTable vectorsTable, ref SigmaTable sigmaTable, ref VectorSet nonDominatedVectors) { Vector nullVector = new Vector(-1, -1); Vector zeroVector = new Vector(0, 0); VectorSet nullVectorSet = new VectorSet(nullVector); VectorSet zeroVectorSet = new VectorSet(zeroVector); //prepare table for (int i = 0; i < task.Dimension; i++) { Row nullRow = new Row(); for (int j = 0; j < task.Limit; j++) { nullRow.Add(new VectorSet(new Vector(-1, -1))); } vectorsTable.Add(nullRow); } for (int i = 0; i < task.Limit; i++) { if (task.LimitationCoefficients[0] <= i + 1) { Vector tmpVector = new Vector(task.FirstCriterion[0], task.SecondCriterion[0]); VectorSet tmpVectorSet = new VectorSet(tmpVector); vectorsTable[0][i].Set(tmpVectorSet); } else { vectorsTable[0][i].Set(new VectorSet(new Vector(0, 0))); } } //fill table RecursFill(vectorsTable, task.Dimension - 1, task.Limit - 1); nonDominatedVectors.Set(vectorsTable[task.Dimension - 1][task.Limit - 1]); //fill sigma-table for (int i = 0; i < task.Dimension; i++) { for (int j = 0; j < task.Limit; j++) { if ((vectorsTable[i][j][0].X != zeroVectorSet[0].X) && (vectorsTable[i][j][0].Y != zeroVectorSet[0].Y) && (vectorsTable[i][j][0].X != nullVectorSet[0].X) && (vectorsTable[i][j][0].Y != nullVectorSet[0].Y)) { for (int k = 0; k < vectorsTable[i][j].Count; k++) { Sigma newSigma = new Sigma(vectorsTable[i][j][k], i + 1, j + 1); if (newSigma.Vector.X != 0 || newSigma.Vector.Y != 0) //check not empty { bool notExist = true; foreach (Sigma oldSigma in sigmaTable) { if ((oldSigma.Vector.X == newSigma.Vector.X) && (oldSigma.Vector.Y == newSigma.Vector.Y)) { notExist = false; } } if (notExist) { sigmaTable.Add(newSigma); } } } } } } }