diff --git a/obj/Debug/net6.0/lpr381.csproj.CoreCompileInputs.cache b/obj/Debug/net6.0/lpr381.csproj.CoreCompileInputs.cache index 321c7a4..5c08ff5 100644 --- a/obj/Debug/net6.0/lpr381.csproj.CoreCompileInputs.cache +++ b/obj/Debug/net6.0/lpr381.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -fcff68d6d49c0113e7e1149aaa08f33487aa1927 +2378da97a7cf4743291d214cf9ba5b9a5bd52a98 diff --git a/obj/Debug/net6.0/lpr381.dll b/obj/Debug/net6.0/lpr381.dll index 6fc1876..08f62bf 100644 Binary files a/obj/Debug/net6.0/lpr381.dll and b/obj/Debug/net6.0/lpr381.dll differ diff --git a/obj/Debug/net6.0/lpr381.pdb b/obj/Debug/net6.0/lpr381.pdb index 470ebd0..bbd0735 100644 Binary files a/obj/Debug/net6.0/lpr381.pdb and b/obj/Debug/net6.0/lpr381.pdb differ diff --git a/obj/Debug/net6.0/ref/lpr381.dll b/obj/Debug/net6.0/ref/lpr381.dll index 93ced73..90c4238 100644 Binary files a/obj/Debug/net6.0/ref/lpr381.dll and b/obj/Debug/net6.0/ref/lpr381.dll differ diff --git a/twoPhaseSimplex.cs b/twoPhaseSimplex.cs new file mode 100644 index 0000000..3f640d4 --- /dev/null +++ b/twoPhaseSimplex.cs @@ -0,0 +1,168 @@ +using ConsoleTables; +class twoPhaseSimplex +{ + public void twoPhaseSimplexAlgo() + { + file file = new file(); + Tuple, List> content = file.readFile(); + List zConstraintsList = content.Item1; + List constraintsList = content.Item2; + + // print constraintsList + foreach (zConstraints constraints in zConstraintsList) + { + Console.WriteLine(constraints.minMax + " " + string.Join(" ", constraints.values)); + } + foreach (Constraints constraints in constraintsList) + { + Console.WriteLine(constraints.sign + " " + string.Join(" ", constraints.values)); + } + List> table = new List>(); + table.Add(zConstraintsList[0].values); + // add all constraints in constraintsList to table + foreach (Constraints constraints in constraintsList) + { + table.Add(constraints.values); + } + List> newTable = new List>(); + // add all rows in table to newTable + foreach (List row in table) + { + // add all columns in row to newTable without reference to table + List newRow = new List(); + for (int i = 0; i < row.Count; i++) + { + newRow.Add(row[i]); + + } + newTable.Add(newRow); + } + int varCount = newTable[0].Count; + table = prepareTable(newTable, constraintsList); + + // print table + printTable(table, varCount); + + } + + void printTable(List> table, int varCount) + { + string[] headers = new string[table[0].Count]; + for (int i = 0; i < table[0].Count; i++) + { + if (i < varCount) + { + headers[i] = "x" + (i + 1); + } + else if (i < table[0].Count - 1) + { + headers[i] = "e" + (i - varCount + 1); + headers[i+1] = "a" + (i - varCount + 1); + headers[i+2] = "s" + (i - varCount + 1); + i = i + 2; + } + else + { + headers[i] = "rhs"; + } + } + var conTable = new ConsoleTable(headers); + foreach (List row in table) + { + // convert row to object array + object[] rowArray = new object[row.Count]; + for (int i = 0; i < row.Count; i++) + { + rowArray[i] = row[i]; + } + conTable.AddRow(rowArray); + } + conTable.Write(Format.Alternative); + + } + + List> prepareTable(List> table, List constraints) + { + // save all values in table in to newTable + List> newTable = new List>(); + foreach (List row in table) + { + List newRow = new List(); + foreach (float value in row) + { + newRow.Add(value); + } + newTable.Add(newRow); + } + List signs = new List(); + foreach (Constraints constraint in constraints) + { + signs.Add(constraint.sign); + } + for (int i = 0; i < signs.Count ; i++) + { + table[0].Add(0); + table[0].Add(0); + table[0].Add(0); + // add 3 0s to each row for every column in table + for (int j = 0; j < newTable[i+1].Count-1; j++) + { + if (signs[i] == ">=") + { + if (i == j) + { + table[i+1].Add(0); + table[i+1].Add(0); + table[i+1].Add(1); + } + else + { + table[i+1].Add(0); + table[i+1].Add(0); + table[i+1].Add(0); + } + } + else if (signs[i] == "<=") + { + if (i == j) + { + table[i+1].Add(1); + table[i+1].Add(1); + table[i+1].Add(0); + } + else + { + table[i+1].Add(0); + table[i+1].Add(0); + table[i+1].Add(0); + } + } + else if (signs[i] == "=") + { + if (i == j) + { + table[i+1].Add(0); + table[i+1].Add(1); + table[i+1].Add(0); + } + else + { + table[i+1].Add(0); + table[i+1].Add(0); + table[i+1].Add(0); + } + } + } + } + table[0].Add(0); + // remove intex newTable.Count-1 from table and place it in the back of table + for (int i = 1; i < table.Count; i++) + { + table[i].RemoveAt(newTable.Count-1); + table[i].Add(newTable[i][newTable.Count-1]); + + } + + return table; + } +} \ No newline at end of file