|
使用爬山算法优化简单的数学函数 假设我们需要找到函数 𝑓(𝑥)=−𝑥^2+4𝑥的最大值。这是一个具有单个局部最大值的简单抛物线函数。
. Q" M% o3 O! {& r: y2 @步骤 1: 定义目标函数 首先,定义我们需要优化的函数。在MATLAB中,我们可以创建一个函数来计算给定x值的 𝑓(𝑥)。  - function y = myFunction(x)3 h9 G( w/ D- G; [* k9 m8 a. M% o* L
- y = -x^2 + 4*x;
- \\" r; B- F\\" |- U, A
- end
步骤 2: 实现爬山算法 接着,实现爬山算法。我们从一个随机点开始,然后在每一步尝试移动到一个“邻居”点,如果那里的值更高,就移动到那里。  - function [bestX, bestY] = hillClimbing(func, initialX, stepSize, numIterations)
- % J9 [/ ?. S$ N& _/ b, g
- currentX = initialX;! n, c4 P9 ]+ j3 @
- currentY = func(currentX);7 k, x' w8 ?3 V, N. q$ z
- for i = 1:numIterations' g$ w$ ^# U% P9 c8 J
- % 尝试在两个方向上移动1 Q/ _' J. M6 I( f4 A! |' ?, s/ V
- newX = [currentX + stepSize, currentX - stepSize];
- 0 |4 e# K: G) a* _\\" D
- newY = [func(newX(1)), func(newX(2))];
- ; i$ B! E/ O5 V% a! N& b
-
- , d: t. k; i7 r$ A. Q) B) ]8 F
- % 找出最好的移动方向
- \\" q- o1 B/ u9 o( `1 j& o* q
- [maxY, idx] = max(newY);
- 8 H# P; y7 Y/ Z6 _. j3 w( Q9 e
- 5 s% k) o0 [3 ?3 z2 D, V8 G. u
- % 如果找到了更好的解,则更新当前解
- + q6 Q- r. b K! L) A2 ?
- if maxY > currentY# z- d2 A2 y) T6 _/ c
- currentX = newX(idx);
- ! N o4 ^; d( t2 A; N/ M; d5 j f
- currentY = maxY;
- # ]) y; j* t4 [1 c
- else
- / ]6 f; K$ Q* K+ X# Z
- % 如果没有更好的解,结束搜索' o. y$ \9 v! G( Q; k
- break;
- . a6 S- n8 E: \; w\\" D
- end7 B5 L1 q/ C3 F8 Z# B. h6 h
- end
- 3 t% @9 _! \0 D
- bestX = currentX;\\" v0 X/ {' H8 T+ F! c- t' d
- bestY = currentY;
- & D F8 U+ N/ a6 D4 A U; U
- end: S8 R+ d7 Z4 T6 X$ y/ g
- ) P) ^- t4 f5 n. E. H
- % 运行爬山算法9 [( D( G: V) r& \4 B6 ~: U\\" S
- initialX = 0; % 初始点& m0 c- R3 K/ [! h& \. W
- stepSize = 0.1; % 步长
- \\" K9 N# N$ u. \\\" b: r, j
- numIterations = 100; % 迭代次数, ]; G! K4 ?: z1 G9 s
- [bestX, bestY] = hillClimbing(@myFunction, initialX, stepSize, numIterations);
步骤 3: 输出结果 展示算法找到的最优解。 - disp(['The maximum value of f(x) is found at x = ', num2str(bestX)]);: l% @1 j5 s& }, Y0 A+ C
- disp(['The maximum value of f(x) is ', num2str(bestY)]);
复制代码 步骤 4: 可视化 可视化函数和算法找到的最大值点,以更好地理解算法的行为。  - x = 0:0.01:5;( ]2 I8 k7 D* d\\" ~6 x9 U$ A' F
- y = myFunction(x);6 u- J7 v. X7 e9 J4 K
- figure;
- 2 @\\" y7 I2 M% M
- plot(x, y, 'b-', bestX, bestY, 'ro');. I+ g/ J% h0 ?
- title('Function Optimization using Hill Climbing');
- + F& R: P$ z. T% s1 q6 Z
- xlabel('x');\\" v# h/ q\\" Q& h/ v
- ylabel('f(x)');
- 6 x0 e& Y; i* ^
- legend('Function', 'Maximum Point');
S) q T D; V) c3 _1 T
|