private static void DecideKnot(NumeratedNode node, int k) { var parameters = node.Parameters; var knot = node.Node; parameters.L[0] = knot.WL; parameters.R[0] = knot.WR; for (var i = 0; i < k; i++) { parameters.L[i] = double.PositiveInfinity; parameters.R[i] = double.PositiveInfinity; } for (var a = 1; a < parameters.Q.Length; a++) { for (var b = a; b < parameters.Q[a].Length; b++) { for (var c = 1; c < parameters.Q[a][b].Length; c++) { for (var d = c; d < parameters.Q[a][b][c].Length; d++) { for (var e = 0; e < parameters.Q[a][b][c][d].Length; e++) { parameters.Q[a][b][c][d][e] = DecideKnotQ(a, b, c, d, e, k); } } } } } node.Parameters.M = knot.WL + knot.WR; }
private void DecideP(NumeratedNode node, int k) { var nodeX = node.NodeX; var nodeY = node.NodeY; var nodeZ = node.Node; node.Parameters.M = nodeX.Parameters.M + nodeY.Parameters.M - nodeZ.WL - nodeZ.WR; for (var a = 1; a <= k - 1; a++) { node.Parameters.L[a] = MinLRPNode(nodeX.Parameters.L, nodeY.Parameters.L, k, a) - nodeZ.WL; node.Parameters.R[a] = MinLRPNode(nodeX.Parameters.R, nodeY.Parameters.R, k, a) - nodeZ.WR; for (var b = 1; b <= k - 1; b++) { for (var c = 1; c <= k - 1; c++) { for (var d = 1; d <= k - 1; d++) { for (var e = -k; e <= k - 1; e++) { node.Parameters.Q[a][b][c][d][e] = MinQxQyPNode(nodeX.Parameters.Q, nodeY.Parameters.Q, k, a, b, c, d, e); } } } } } }
private static void DecideS(NumeratedNode node, int k) { var nodeX = node.NodeX; var nodeY = node.NodeY; var s = new double[2]; s[0] = nodeX.Parameters.M + nodeY.Parameters.M - node.Node.WR; s[1] = MinLxRy(nodeX.Parameters.L, nodeY.Parameters.R, k); node.Parameters.M = s.Min(); for (var a = 1; a < k; a++) { s[0] = nodeX.Parameters.M + nodeY.Parameters.L[a] - node.Node.WR; s[1] = MinLxQy(nodeX.Parameters.L, nodeY.Parameters.Q, k, a); node.Parameters.L[a] = s.Min(); s[0] = nodeX.Parameters.R[a] + nodeX.Parameters.M - node.Node.WR; s[1] = MinQxRy(nodeX.Parameters.Q, nodeY.Parameters.R, k, a); node.Parameters.R[a] = s.Min(); for (var c = a; c < k; c++) { s[0] = nodeX.Parameters.R[a] + nodeY.Parameters.L[c] - node.Node.WR; s[1] = MinQzQy(node.Parameters.Q, nodeY.Parameters.Q, k, a, c); node.Parameters.Q[a][a][c][c][0] = s.Min(); for (var b = 1; b <= k - 1; b++) { for (var d = c; d <= k - 1; d++) { node.Parameters.Q[a][b][c][d][1] = double.PositiveInfinity; for (var e = 2; e <= k - 1; e++) { node.Parameters.Q[a][b][c][d][e] = MinQxQy(nodeX.Parameters.Q, nodeY.Parameters.Q, k, a, b, c, d, e); } } } } } }
private void DecideJ(NumeratedNode nodeZ, int k) { var nodeX = nodeZ.NodeX; var nodeY = nodeZ.NodeY; var minLy = MinLJNode(nodeY.Parameters.L, k); var minMy = nodeY.Parameters.M < minLy ? nodeY.Parameters.M : minLy; nodeZ.Parameters.M = nodeX.Parameters.M + minMy - nodeX.Node.WR; var s = new double[2]; for (var a = 1; a <= k - 1; a++) { //s[0] = MinLxRyJNode(nodeX.Parameters.L, nodeY.Parameters.R, k, a);//todo //s[1] = ; //nodeZ.Parameters.L[a] = s.Min(); nodeZ.Parameters.R[a] = nodeX.Parameters.R[a] - nodeX.Node.WR + minMy; for (var b = a; b <= k - 1; b++) { for (var c = 1; c <= k - 1; c++) { for (var d = c; d <= k - 1; d++) { for (var e = -k; e <= k - 1; e++) { s[0] = MinQxRyJNode(nodeX.Parameters.Q, nodeY.Parameters.R, k, a, b, c, d, e); s[1] = MinQxQyJNode(nodeX.Parameters.Q, nodeY.Parameters.Q, k, a, b, c, d, e); nodeZ.Parameters.Q[a][b][c][d][e] = s.Min(); } } } } } }