50{
51 srand(static_cast<unsigned int>(time(0)));
52 char choice;
54
55 do
56 {
57 std::cout << "\nOptimization Algorithms Menu:\n";
58 std::cout << "1. Steepest Descent Method\n";
59 std::cout << "2. Conjugate Gradient Method\n";
60 std::cout << "3. Simulated Annealing\n";
61 std::cout << "4. Genetic Algorithm\n";
62 std::cout << "5. Compare All Methods\n";
63 std::cout << "Enter your choice (1-5): ";
64 int option;
65 std::cin >> option;
66
67 if (option >= 1 && option <= 4)
68 {
70 std::cout << "\n1. Use default parameters\n";
71 std::cout << "2. Customize parameters\n";
72 std::cout << "Enter your choice (1-2): ";
73 int subOption;
74 std::cin >> subOption;
75
77 if (subOption == 1)
78 {
79
80 if (option == 1)
82 else if (option == 2)
84 else if (option == 3)
86 else if (option == 4)
88
89
90 std::cout << "\nResults:\n";
91 std::cout <<
"Minimum at (" << std::fixed << std::setprecision(4) << res.
x <<
", " << res.
y <<
")\n";
92 std::cout <<
"Minimum value: " << std::fixed << std::setprecision(4) << res.
f <<
"\n";
93 std::cout <<
"Total iterations: " << res.
iterations <<
"\n";
94 std::cout <<
"Execution Time: " << std::scientific << std::setprecision(3) << res.
duration <<
" seconds\n";
95 }
96 else if (subOption == 2)
97 {
98
99 std::cout <<
"Enter initial x (default " << std::fixed << std::setprecision(4) << params.
x0 <<
"): ";
100 std::cin >> params.
x0;
101 std::cout <<
"Enter initial y (default " << std::fixed << std::setprecision(4) << params.
y0 <<
"): ";
102 std::cin >> params.
y0;
103
104 if (option == 1)
105 {
106 std::cout <<
"Enter learning rate alpha (default " << std::fixed << std::setprecision(4) << params.
alpha_sd <<
"): ";
108 std::cout <<
"Enter maximum iterations (default " << params.
maxIter_sd <<
"): ";
110 std::cout <<
"Enter tolerance (default " << std::scientific << std::setprecision(3) << params.
tol_sd <<
"): ";
111 std::cin >> params.
tol_sd;
113 }
114 else if (option == 2)
115 {
116 std::cout <<
"Enter maximum iterations (default " << params.
maxIter_cg <<
"): ";
118 std::cout <<
"Enter tolerance (default " << std::scientific << std::setprecision(3) << params.
tol_cg <<
"): ";
119 std::cin >> params.
tol_cg;
121 }
122 else if (option == 3)
123 {
124 std::cout <<
"Enter initial temperature T0 (default " << std::fixed << std::setprecision(4) << params.
T0_sa <<
"): ";
125 std::cin >> params.
T0_sa;
126 std::cout <<
"Enter minimum temperature Tmin (default " << std::scientific << std::setprecision(6) << params.
Tmin_sa <<
"): ";
128 std::cout <<
"Enter cooling rate alpha (default " << std::fixed << std::setprecision(4) << params.
alpha_sa <<
"): ";
130 std::cout <<
"Enter maximum iterations (default " << params.
maxIter_sa <<
"): ";
133 }
134 else if (option == 4)
135 {
136 std::cout <<
"Enter population size (default " << params.
populationSize_ga <<
"): ";
138 std::cout <<
"Enter number of generations (default " << params.
generations_ga <<
"): ";
140 std::cout <<
"Enter mutation rate (default " << std::fixed << std::setprecision(4) << params.
mutationRate_ga <<
"): ";
142 std::cout <<
"Enter crossover rate (default " << std::fixed << std::setprecision(4) << params.
crossoverRate_ga <<
"): ";
145 }
146
147
148 std::cout << "\nResults:\n";
149 std::cout <<
"Minimum at (" << std::fixed << std::setprecision(4) << res.
x <<
", " << res.
y <<
")\n";
150 std::cout <<
"Minimum value: " << std::fixed << std::setprecision(4) << res.
f <<
"\n";
151 std::cout <<
"Total iterations: " << res.
iterations <<
"\n";
152 std::cout <<
"Execution Time: " << std::scientific << std::setprecision(3) << res.
duration <<
" seconds\n";
153 }
154 else
155 {
156 std::cout << "Invalid sub-option. Please select 1 or 2.\n";
157 }
158 }
159 else if (option == 5)
160 {
161
163 }
164 else
165 {
166 std::cout << "Invalid option. Please select 1-5.\n";
167 }
168
169
170 std::cout << "\nDo you want to run the program again? (y/n): ";
171 std::cin >> choice;
172 } while (choice == 'y' || choice == 'Y');
173
174
175 std::cout << "\nPress Enter to exit...";
176 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
177 std::cin.get();
178 return 0;
179}
Result simulatedAnnealing(double x0, double y0, double T0, double Tmin, double alpha, int maxIter)
Result steepestDescent(double x0, double y0, double alpha, int maxIter, double tol)
Result conjugateGradient(double x0, double y0, int maxIter, double tol)
Result geneticAlgorithm(int populationSize, int generations, double mutationRate, double crossoverRate)
void compareMethods(const DefaultParameters ¶ms)
void displayDefaultParameters(const DefaultParameters ¶ms, int option)