public RucksackResult Compute() { int alpha = 0; int f = 0; do { alpha++; // Wenn alpha bereits größer als der maximale Wert ist -> Abbruch // Dies passiert z.B. wenn die Summe der Volumina der Waren nicht // das Volumen des Rucksacks übersteigt. if (alpha > Psum) { break; } for (int j = 1; j <= n; j++) { FTable[j, alpha] = F(j, alpha); } f = (int)F(n, alpha); Console.WriteLine($"α={alpha}; F={f}"); } while (B >= f); alpha = alpha - 1; var result = new RucksackResult() { Repeats = alpha, UsedVolume = (int)F(n, alpha), Price = alpha, Table = FTable }; return(result); }
public RucksackResult Compute() { int alpha = 0; while (true) { alpha++; float f = F(n, alpha); Console.WriteLine($"α={alpha}; F={(int)f}"); if (B < f) { alpha = alpha - 1; var result = new RucksackResult() { Repeats = alpha, UsedVolume = (int)F(n, alpha), Price = alpha }; return(result); } } }
static void Main(string[] args) { //var testData1 = new RucksackInput( // 5000, // new Ware(10, 60), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 400), // new Ware(200, 100), // new Ware(200, 100), // new Ware(200, 100), // new Ware(200, 100), // new Ware(200, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(20, 100), // new Ware(30, 120) //); //var testData2 = new RucksackInput( // 3, // new Ware(1, 1), // new Ware(1, 2) //); //// P08 from https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html //// optimal profit of 13549094 //var testData3 = new RucksackInput( // 6404180, // new Ware(382745, 825594), // new Ware(799601, 1677009), // new Ware(909247, 1676628), // new Ware(729069, 1523970), // new Ware(467902, 943972), // new Ware(44328, 97426), // new Ware(34610, 69666), // new Ware(698150, 1296457), // new Ware(823460, 1679693), // new Ware(903959, 1902996), // new Ware(853665, 1844992), // new Ware(551830, 1049289), // new Ware(610856, 1252836), // new Ware(670702, 1319836), // new Ware(488960, 953277), // new Ware(951111, 2067538), // new Ware(323046, 675367), // new Ware(446298, 853655), // new Ware(931161, 1826027), // new Ware(31385, 65731), // new Ware(496951, 901489), // new Ware(264724, 577243), // new Ware(224916, 466257), // new Ware(169684, 369261) //); //aufgabe 1 b //int i = 1; //aufgabe 1 c int i = 10 ^ 5; //var input = new RucksackInput( // //Volumen Rucksack: // 65, // // Volumen, Nutzen // new Ware(23, 15*i),//Essen // new Ware(33, 23*i),//Zelt // new Ware(11, 15*i),//Getränke // new Ware(35, 33*i),//Pullover // new Ware(11, 32*i) //MP3-Player //); var input = new RucksackInput( //Volumen Rucksack: 50, // Volumen, Nutzen new Ware(30, 120), //Essen new Ware(20, 100), //Zelt new Ware(10, 60) ); var algo = new DynRucksack(input); //var algo = new ARkRucksack(input, 10); //var algo = new FPASRucksack(input, (float)0.1); //var algo = new RucksackNaive(input); var sw = new Stopwatch(); sw.Start(); RucksackResult result = algo.Compute(); sw.Stop(); Console.WriteLine($"The price is {result.Price}, the used volume is {result.UsedVolume} and the repeat count is {result.Repeats} and took {sw.Elapsed}."); Console.WriteLine(result.Table.ToString()); Console.ReadKey(); }