|
使用爬山算法优化简单的数学函数 假设我们需要找到函数 𝑓(𝑥)=−𝑥^2+4𝑥的最大值。这是一个具有单个局部最大值的简单抛物线函数。 ! p% l& l' ^. l; l
步骤 1: 定义目标函数 首先,定义我们需要优化的函数。在MATLAB中,我们可以创建一个函数来计算给定x值的 𝑓(𝑥)。  - function y = myFunction(x)) C* s' }. x; M& M: B
- y = -x^2 + 4*x;
- - ~# y( M3 l' i
- end
步骤 2: 实现爬山算法 接着,实现爬山算法。我们从一个随机点开始,然后在每一步尝试移动到一个“邻居”点,如果那里的值更高,就移动到那里。  - function [bestX, bestY] = hillClimbing(func, initialX, stepSize, numIterations)
- : K; ]( S& q+ G# N. S
- currentX = initialX;
- ( g' t( N, t8 l/ C/ J
- currentY = func(currentX);
- - u- I\\" S; I0 Y/ e A {) Z# [ j
- for i = 1:numIterations
- ) r/ D* ^1 I* F\\" G1 `
- % 尝试在两个方向上移动4 q- B/ J0 n2 K# d% g
- newX = [currentX + stepSize, currentX - stepSize];
- 5 n( S1 u/ D: W3 E+ _
- newY = [func(newX(1)), func(newX(2))];/ t( z6 {, \; W8 r9 l) c5 z; |
- Q0 ^' J/ | T% R! o4 Q
- % 找出最好的移动方向. t6 k# r' N/ f: s1 r: P6 S
- [maxY, idx] = max(newY);
- 1 |7 R\\" s$ a% A3 B/ `6 G; C
- / r* N. g# E/ h7 s2 ~1 i' ^
- % 如果找到了更好的解,则更新当前解4 G8 M- Y2 ^( |
- if maxY > currentY
- ; t9 P\\" ~5 x% V: R i( ^7 m& F3 L
- currentX = newX(idx);, R+ o: S/ o# o8 y# A
- currentY = maxY;
- & b) Z, b\\" J& B\\" [5 w0 T* l
- else
- 5 b2 L/ i! d6 \7 {, i
- % 如果没有更好的解,结束搜索
- ! X; f7 o2 y1 c8 _
- break;0 M9 [, @- g4 d4 _5 [6 {5 `0 `9 d6 a: N
- end$ G( K1 Q% K' E: h. Y
- end' z0 }9 J) @0 o. c8 L8 [
- bestX = currentX;
- * O0 D J$ f& L. F+ T/ M3 y1 C
- bestY = currentY;: C0 u1 U) J' `9 j9 F/ C5 }2 y
- end. ?$ M+ s\\" L5 R5 U$ k( e% z
-
- 4 i3 s( s2 c- P3 w. }5 A
- % 运行爬山算法
- / v\\" K5 x1 `) e
- initialX = 0; % 初始点7 k4 }: B' T8 `- A- s: L% W! Z8 E2 C
- stepSize = 0.1; % 步长' s' B4 @: @/ [% _ N/ J! K
- numIterations = 100; % 迭代次数
- * M$ W, ^0 Z' @2 d+ v. Z8 Z7 ~
- [bestX, bestY] = hillClimbing(@myFunction, initialX, stepSize, numIterations);
步骤 3: 输出结果 展示算法找到的最优解。 - disp(['The maximum value of f(x) is found at x = ', num2str(bestX)]);2 i5 T# T: g8 S, T2 ^2 R
- disp(['The maximum value of f(x) is ', num2str(bestY)]);
复制代码 步骤 4: 可视化 可视化函数和算法找到的最大值点,以更好地理解算法的行为。  - x = 0:0.01:5;* G$ @. E9 t3 k1 s2 K* p$ x) d2 z
- y = myFunction(x);0 m7 u/ _. m- X\\" d4 M
- figure;
- ; y+ W/ A4 M2 l7 d+ }
- plot(x, y, 'b-', bestX, bestY, 'ro');+ P\\" S6 G# B9 m7 Q; n
- title('Function Optimization using Hill Climbing');
- , e/ I6 K: T+ i
- xlabel('x');
- 1 D% j6 d l$ h, x8 b1 m4 V
- ylabel('f(x)');; q% V3 m9 [4 h8 O
- legend('Function', 'Maximum Point');
9 j; r; ]5 \' c. @: \
|