|
使用爬山算法优化简单的数学函数 假设我们需要找到函数 𝑓(𝑥)=−𝑥^2+4𝑥的最大值。这是一个具有单个局部最大值的简单抛物线函数。 7 s4 O, V4 F& B/ j K( x
步骤 1: 定义目标函数 首先,定义我们需要优化的函数。在MATLAB中,我们可以创建一个函数来计算给定x值的 𝑓(𝑥)。  - function y = myFunction(x)
- 9 E1 L- D; Y0 y! q
- y = -x^2 + 4*x;
- & _6 d! ?/ k* X' V! C$ L
- end
步骤 2: 实现爬山算法 接着,实现爬山算法。我们从一个随机点开始,然后在每一步尝试移动到一个“邻居”点,如果那里的值更高,就移动到那里。  - function [bestX, bestY] = hillClimbing(func, initialX, stepSize, numIterations)
- ( j\\" e R: j3 r\\" X& y3 P
- currentX = initialX; u) U& j( a$ a) _4 z
- currentY = func(currentX);+ f3 c _4 h% Z# l+ U
- for i = 1:numIterations3 _, i- I6 n# A; z$ j0 p
- % 尝试在两个方向上移动
- 4 K+ K5 T% D/ i$ o2 T% l
- newX = [currentX + stepSize, currentX - stepSize];; D% x5 @/ H& ]5 s
- newY = [func(newX(1)), func(newX(2))];
- 7 ]' |! P6 k' u
-
- ( C\\" E5 a& r5 {( | \) Z
- % 找出最好的移动方向
- ! M\\" f4 Y* K9 z: a# R' D! `
- [maxY, idx] = max(newY);7 I! G* K/ J# p3 n\\" i; `1 v
- * I T8 }5 M' j
- % 如果找到了更好的解,则更新当前解; `' u$ m% v5 ?- Q/ p, V
- if maxY > currentY3 v q0 V+ }* H( K* A$ s7 X
- currentX = newX(idx);
- # m: ^, V3 y# z9 b$ _) |
- currentY = maxY;5 ^4 d: Y( z7 s, q3 x
- else
- # J5 Z# J7 X1 }1 j; G' I
- % 如果没有更好的解,结束搜索
- 9 N& a+ V! Z5 h) I7 R- y\\" `
- break;
- , `; X& `; d( L- J2 Q' K; B
- end# N$ ~: [+ S8 U, W
- end
- % v$ L9 r2 ]/ \# u$ z- v: c
- bestX = currentX;
- . y! D' r\\" R! F+ i, E
- bestY = currentY;
- ; L) B, Y& Z\\" ?( ~
- end/ v L! r! N9 f+ G) k/ |* D4 [
-
- ]* C- m, H% i7 i) C5 D$ m0 z\\" a
- % 运行爬山算法
- ( K7 b6 @9 @, ]0 J
- initialX = 0; % 初始点4 }: E5 j4 ~0 {3 x2 E+ j/ x$ |9 F
- stepSize = 0.1; % 步长4 z! w\\" r7 z2 r/ ^3 h0 a6 Z0 U
- numIterations = 100; % 迭代次数6 _1 Z' l2 Q3 {1 G\\" t s- N! w3 |
- [bestX, bestY] = hillClimbing(@myFunction, initialX, stepSize, numIterations);
步骤 3: 输出结果 展示算法找到的最优解。 - disp(['The maximum value of f(x) is found at x = ', num2str(bestX)]);
/ x+ z( h0 P5 E\" q# P8 R) O Y - disp(['The maximum value of f(x) is ', num2str(bestY)]);
复制代码 步骤 4: 可视化 可视化函数和算法找到的最大值点,以更好地理解算法的行为。  - x = 0:0.01:5;. Y3 Z8 j- n/ j8 B3 D w
- y = myFunction(x);
- 9 y7 r1 x( ^3 k' j9 L' s
- figure;- D9 L, a+ _3 b9 {/ G0 I
- plot(x, y, 'b-', bestX, bestY, 'ro');
- $ D( Z; \% ]. G3 t
- title('Function Optimization using Hill Climbing');- {; i+ n7 o8 D- ?7 e
- xlabel('x');: T B# I) ~2 g$ }2 g; ~: I# @6 C
- ylabel('f(x)');
- ; |7 y5 m$ `$ N' \4 D
- legend('Function', 'Maximum Point');
4 D$ w$ Z) I* q/ H0 G8 }- r1 F$ M/ P! h
|