|
使用爬山算法优化简单的数学函数 假设我们需要找到函数 𝑓(𝑥)=−𝑥^2+4𝑥的最大值。这是一个具有单个局部最大值的简单抛物线函数。
9 \! [" m; f3 b# X+ ~' Q步骤 1: 定义目标函数 首先,定义我们需要优化的函数。在MATLAB中,我们可以创建一个函数来计算给定x值的 𝑓(𝑥)。  - function y = myFunction(x)
- \\" V& f' f8 ~3 R; y
- y = -x^2 + 4*x;6 j: k% `( K6 b% ^( y8 k9 v7 {2 Y
- end
步骤 2: 实现爬山算法 接着,实现爬山算法。我们从一个随机点开始,然后在每一步尝试移动到一个“邻居”点,如果那里的值更高,就移动到那里。  - function [bestX, bestY] = hillClimbing(func, initialX, stepSize, numIterations)
- : }% ~. V- K: I3 q
- currentX = initialX;
- 3 ^5 ?' F1 g1 g6 d% G W- e
- currentY = func(currentX);4 n# h! h6 A\\" ^
- for i = 1:numIterations
- , ]% p' k/ o J0 L
- % 尝试在两个方向上移动/ U* `1 z\\" q* C8 a/ X
- newX = [currentX + stepSize, currentX - stepSize]; Y8 D% r, [/ i7 j
- newY = [func(newX(1)), func(newX(2))];# i- z! P t$ i+ k/ T. c
- ; ?. A6 x3 s1 A+ B E# \\\" w) }\\" C
- % 找出最好的移动方向( A- f! {! V\\" v1 j! p- n4 Q\\" ]; d
- [maxY, idx] = max(newY);
- y( k' C3 {- _' J\\" Z5 m+ u
- 7 r/ o n\\" y! X! [\\" L5 b) V) d
- % 如果找到了更好的解,则更新当前解
- $ @2 Q+ u% O/ T3 X' x& ]\\" V* R
- if maxY > currentY0 q7 j( z, m& n) U& E
- currentX = newX(idx);+ n. h- i2 q0 v! K0 N% L( H
- currentY = maxY;
- - l8 Q7 k! _- o6 `& L3 p) d; C\\" }
- else
- - ~4 C( E5 j\\" S& C
- % 如果没有更好的解,结束搜索
- # f {7 V8 r: g% r( {* _% ?
- break;
- ) r; o* U# s) A: @, r) L
- end/ P( ~0 l0 W* ?' Z; a( p2 F\\" k+ e! S$ N
- end* `1 ^ ~# }9 ]- ~* A
- bestX = currentX;
- ) Q0 c* l+ R* c4 d* G
- bestY = currentY;
- 5 J6 }' j1 O8 }9 X: y\\" @
- end4 g% L9 |0 s; q& r' y
- % O7 a5 U8 I% Q/ S: w) }
- % 运行爬山算法4 c7 V1 T# [9 L: i
- initialX = 0; % 初始点
- * w& H: f7 y5 C% A2 N
- stepSize = 0.1; % 步长- k* l7 S$ d3 E3 N4 }3 N
- numIterations = 100; % 迭代次数2 G& h# D7 A) f7 J$ C7 n& C
- [bestX, bestY] = hillClimbing(@myFunction, initialX, stepSize, numIterations);
步骤 3: 输出结果 展示算法找到的最优解。 - disp(['The maximum value of f(x) is found at x = ', num2str(bestX)]);
$ |# N9 |; y% v& I1 ]% f9 R$ L - disp(['The maximum value of f(x) is ', num2str(bestY)]);
复制代码 步骤 4: 可视化 可视化函数和算法找到的最大值点,以更好地理解算法的行为。  - x = 0:0.01:5;
- 0 Z! P! G3 f# J: k! Y: a
- y = myFunction(x);
- + D1 {; C& H4 Z# E' W z
- figure;; R/ u2 O) p$ @\\" N1 T; }
- plot(x, y, 'b-', bestX, bestY, 'ro');; T# E# K3 e. M$ L, [3 p
- title('Function Optimization using Hill Climbing');
- # I& y; P* x9 o! g$ w
- xlabel('x'); ~2 B9 y' A- @\\" f s [
- ylabel('f(x)');6 g v. n: ]7 e' g: m$ W z
- legend('Function', 'Maximum Point');
7 w0 V F3 k) a; @6 m4 k |