中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

南京網(wǎng)站流量優(yōu)化輕松seo優(yōu)化排名 快排

南京網(wǎng)站流量優(yōu)化,輕松seo優(yōu)化排名 快排,萬江網(wǎng)站建設(shè),wordpress文章重復(fù)以下是一種循序推理的方式,來幫助你從基礎(chǔ)概念出發(fā),理解 內(nèi)點(diǎn)法(Interior-Point Method, IPM) 是什么、為什么要用它,以及它是如何工作的。 1. 問題起點(diǎn):帶不等式約束的優(yōu)化 假設(shè)你有一個(gè)帶不等式約束的優(yōu)…

以下是一種循序推理的方式,來幫助你從基礎(chǔ)概念出發(fā),理解 內(nèi)點(diǎn)法(Interior-Point Method, IPM) 是什么、為什么要用它,以及它是如何工作的。


1. 問題起點(diǎn):帶不等式約束的優(yōu)化

假設(shè)你有一個(gè)帶不等式約束的優(yōu)化問題:
min ? x f ( x ) subject?to? g i ( x ) ≤ 0 , i = 1 , … , m . \begin{aligned} &\min_{x} \quad f(x) \\ &\text{subject to } \quad g_i(x) \le 0, \quad i=1,\ldots,m. \end{aligned} ?xmin?f(x)subject?to?gi?(x)0,i=1,,m.?

  • f ( x ) f(x) f(x):目標(biāo)函數(shù)
  • g i ( x ) ≤ 0 g_i(x) \le 0 gi?(x)0:不等式約束(例如,控制輸入不能超范圍)

我們想要找到一個(gè)滿足所有約束且使目標(biāo)函數(shù)最小的點(diǎn) x ? x^* x?。


2. 直接在邊界上“走”的困難

一種思路是:最優(yōu)點(diǎn)往往在可行域邊界上(很多經(jīng)典優(yōu)化問題里,最優(yōu)解會(huì)出現(xiàn)在約束生效的邊界)。

  • 但是,如果我們只在邊界上“走”,常常要先找到并跟隨所有活躍約束的交線,這在高維情況下非常復(fù)雜。
  • 并且,如果問題是非線性的,直接處理“在邊界上走”會(huì)更難,容易出現(xiàn)數(shù)值不穩(wěn)定或無法收斂的問題。

3. 想法:能不能“在里面”搜索,最后再逼近邊界?

為了避免“一上來就卡在邊界”,有人提出:

  • 先在可行域內(nèi)部(所有約束 g i ( x ) < 0 g_i(x) < 0 gi?(x)<0 都“寬?!?#xff09;附近做搜索,那里沒有太多束縛,比較容易用連續(xù)的梯度法去迭代尋優(yōu);
  • 當(dāng)我們逐漸找到一個(gè)更優(yōu)解,需要靠近邊界時(shí),再“慢慢地”逼近它。

這樣做,就不需要每一步都嚴(yán)格跟在邊界上,也能保證可行性(不跑到約束外面去)。


4. 內(nèi)點(diǎn)法的關(guān)鍵:障礙函數(shù)(Barrier Function)

為在域內(nèi)部搜索,需要一種數(shù)學(xué)手段,讓解“自動(dòng)”不跑出界。這時(shí)就引入了障礙函數(shù)。

4.1 形式:對約束加一個(gè)“負(fù)對數(shù)”項(xiàng)

對每個(gè)不等式約束 g i ( x ) ≤ 0 g_i(x)\le0 gi?(x)0,定義一個(gè)項(xiàng):
? log ? ( ? g i ( x ) ) . -\log(-g_i(x)). ?log(?gi?(x)).

  • 如果 g i ( x ) < 0 g_i(x) < 0 gi?(x)<0,那么 ? g i ( x ) > 0 -g_i(x) > 0 ?gi?(x)>0,對數(shù)是可以求的。
  • 一旦 g i ( x ) g_i(x) gi?(x) 接近 0(也就是接近邊界), ? g i ( x ) -g_i(x) ?gi?(x) 趨向 0,這個(gè)對數(shù)會(huì)趨向 ? ∞ -\infty ?,但我們在目標(biāo)函數(shù)中是帶一個(gè)負(fù)號“-”,變成了一個(gè)正無窮大的懲罰。
  • 這樣一來,就相當(dāng)于在可行域的邊緣設(shè)置了一道**“墻”,越靠近邊界,代價(jià)就越大,解被迫**留在可行域內(nèi)部。

4.2 組合成“障礙型”目標(biāo)函數(shù)

把原本的目標(biāo)函數(shù) f ( x ) f(x) f(x) 和障礙項(xiàng)結(jié)合:
B ( x , μ ) = f ( x ) ? μ ∑ i = 1 m log ? ( ? g i ( x ) ) . B(x, \mu) = f(x) - \mu \sum_{i=1}^m \log\bigl(-g_i(x)\bigr). B(x,μ)=f(x)?μi=1m?log(?gi?(x)).

  • μ > 0 \mu > 0 μ>0 是一個(gè)系數(shù),稱為“障礙參數(shù)(barrier parameter)”。
  • 當(dāng) μ \mu μ 較大時(shí),障礙懲罰也大,解就離約束邊界更遠(yuǎn);當(dāng)我們逐漸減小 μ \mu μ,系統(tǒng)會(huì)允許解更靠近邊界。

5. 迭代逼近最優(yōu)解

內(nèi)點(diǎn)法并不是一次就把問題解決,而是:

  1. 從一個(gè)“較寬松”的問題開始 μ \mu μ 比較大,邊界懲罰很強(qiáng))。
  2. 求解 min ? x B ( x , μ ) \min_x B(x, \mu) minx?B(x,μ),得到一個(gè)可行域內(nèi)部的解。
  3. 降低 μ \mu μ 的值,重新求解,這時(shí)可以允許解更加靠近(或到達(dá))真正的最優(yōu)邊界。
  4. 多次迭代后, μ → 0 \mu \to 0 μ0,解會(huì)逼近真實(shí)最優(yōu)解。

這一過程里,算法會(huì)用到類似于 牛頓法、KKT 條件 等工具來求解各輪的子問題。


6. 內(nèi)點(diǎn)法 vs. 其他方法

  • 單純形法(Simplex):在可行域的“頂點(diǎn)—邊界—面”上走,比較適合線性規(guī)劃;但在高維非線性問題上,效率可能較低。
  • 內(nèi)點(diǎn)法:通過“障礙函數(shù)”把解留在域內(nèi)部,逐漸往邊界逼近,常在非線性規(guī)劃(NLP)中表現(xiàn)更好,也更適合大規(guī)模問題。

7. 在 MPC 中的應(yīng)用

MPC 求解器(如 IPOPT)正是利用內(nèi)點(diǎn)法來處理:

  • 多步預(yù)測的系統(tǒng)動(dòng)力學(xué)約束
  • 輸入/狀態(tài)上下限
  • 非線性目標(biāo)函數(shù)

讓無人機(jī)等系統(tǒng)在高維空間里高效地搜索最優(yōu)控制輸入。


🔑 小結(jié):內(nèi)點(diǎn)法的一句話總結(jié)

內(nèi)點(diǎn)法是一種在可行域“內(nèi)部”迭代搜索的求解策略,通過“障礙函數(shù)”阻擋解跑出可行域,并逐步放松障礙參數(shù),最終逼近最優(yōu)解和約束邊界。

這就是內(nèi)點(diǎn)法的核心“推理過程”:與其從邊界開始,不如在“里層”走,讓數(shù)值算法更穩(wěn)定,再慢慢讓解貼近約束邊界,從而找到最優(yōu)。

下面我將針對這段代碼的邏輯和實(shí)現(xiàn)細(xì)節(jié),結(jié)合“內(nèi)點(diǎn)法(障礙函數(shù)) + 固定步長梯度下降”這一思路,做一個(gè)比較細(xì)致的解析。


1. 整體思路與算法框架

目標(biāo)問題(從注釋和注解上看)是:

min ? f ( x ) = x 1 + x 2 + x 3 s.t. x 1 2 + x 2 2 + x 3 2 ≤ 1. \begin{aligned} &\min \quad f(x) = x_1 + x_2 + x_3 \\ &\text{s.t.} \quad x_1^2 + x_2^2 + x_3^2 \;\le\; 1. \end{aligned} ?minf(x)=x1?+x2?+x3?s.t.x12?+x22?+x32?1.?

  • 可行域是單位球 { x ∈ R 3 : ∥ x ∥ ≤ 1 } \{x \in \mathbb{R}^3 : \|x\|\le 1 \} {xR3:x1}

  • 希望用內(nèi)點(diǎn)法來解決不等式約束 x 1 2 + x 2 2 + x 3 2 ≤ 1 x_1^2 + x_2^2 + x_3^2 \le 1 x12?+x22?+x32?1
    通常在內(nèi)點(diǎn)法中,會(huì)把不等式 (g(x) \le 0)(這里 g ( x ) = x 2 + y 2 + z 2 ? 1 g(x)=x^2+y^2+z^2 -1 g(x)=x2+y2+z2?1 )轉(zhuǎn)寫成形如 (h(x) > 0),再將 (\log h(x)) 當(dāng)作障礙項(xiàng)(barrier)。本例里定義
    h ( x ) = 1 ? ( x 1 2 + x 2 2 + x 3 2 ) , h(x) = 1 - (x_1^2 + x_2^2 + x_3^2), h(x)=1?(x12?+x22?+x32?),
    于是 h ( x ) > 0 h(x) > 0 h(x)>0等價(jià)于 x 1 2 + x 2 2 + x 3 2 < 1 x_1^2 + x_2^2 + x_3^2 < 1 x12?+x22?+x32?<1。

  • 內(nèi)點(diǎn)法的障礙目標(biāo)函數(shù)定義為
    B ( x , μ ) = f ( x ) ? μ ln ? ( h ( x ) ) , B(x,\mu) \;=\; f(x)\;-\;\mu \,\ln\bigl(h(x)\bigr), B(x,μ)=f(x)?μln(h(x)),
    其中 μ > 0 \mu>0 μ>0 是障礙系數(shù)(barrier parameter)。 μ \mu μ 越小, ? μ log ? h ( x ) -\mu \log h(x) ?μlogh(x)的懲罰作用越強(qiáng),最終會(huì)將可行解“推”到最接近邊界的最優(yōu)位置上。

  • 在固定一個(gè) μ \mu μ 的情況下,常用牛頓法或梯度法去最小化 B ( x , μ ) B(x,\mu) B(x,μ) 。在算法外層循環(huán)中,則逐步減小 μ \mu μ(比如乘個(gè)衰減因子),讓解逐步逼近約束邊界并最終得到較準(zhǔn)確的可行最優(yōu)解。

在這份代碼中:

  1. 外層循環(huán) (共 max_outer 次):

    • 每次先用當(dāng)前 μ \mu μ 在球內(nèi)做若干步梯度下降,嘗試求解 min ? B ( x , μ ) \min B(x,\mu) minB(x,μ)
    • 之后衰減 μ \mu μ ← \leftarrow μ ? \mu \cdot μ? (mu_decay) \text{(mu\_decay)} (mu_decay),進(jìn)入下一輪;
    • 重復(fù),直到 μ \mu μ 足夠小或者達(dá)到外層迭代上限。
  2. 內(nèi)層循環(huán) (共 max_inner 次):

    • 計(jì)算當(dāng)前 B B B 的梯度 ? B ( x , μ ) \nabla B(x,\mu) ?B(x,μ)
    • 做一步固定步長的梯度下降: x ← x ? α ? B ( x , μ ) x \leftarrow x - \alpha \nabla B(x,\mu) xx?α?B(x,μ)
    • 如果發(fā)現(xiàn)新點(diǎn) x new x_{\text{new}} xnew?不可行(或者離邊界過近),就縮小步長再試;
    • 如果兩次迭代 ∥ x new ? x ∥ \|x_{\text{new}} - x\| xnew??x 非常小(< tol),就視為收斂并 break。

這樣就得到一條漸進(jìn)接近最優(yōu)解的迭代軌跡,存放在 x_history 中。


2. 代碼主干解析

從最外層開始看起,核心部分在函數(shù)

function x_history = interior_point_3d_solve()% 參數(shù)mu_init = 1.0;      % 初始障礙參數(shù)mu_decay = 0.2;     % 每輪迭代后 mu 的衰減因子alpha    = 0.001;   % 固定梯度下降步長tol      = 1e-6;    % 收斂判據(jù)max_outer= 10;      % 外層循環(huán)次數(shù)max_inner= 50;      % 每次 mu 下最大內(nèi)層迭代次數(shù)% 初始化可行解(球內(nèi))x = [0;0;0];  mu = mu_init;x_history = [];for outer = 1:max_outerfor inner = 1:max_innerg = grad_B(x, mu);  x_new = x - alpha*g;% 若越過球邊界 => h(x_new) <= 0if h_3d(x_new) <= 1e-9x_new = x - 0.1*alpha*g;  % 縮小步長再試end% 收斂判斷if norm(x_new - x) < tolx = x_new;break;  % 跳出內(nèi)層循環(huán)endx = x_new;x_history = [x_history; x']; end% 減小 mumu = mu * mu_decay;if mu < 1e-12break;    % mu 已經(jīng)很小,不必再迭代endend% 加入最終點(diǎn)x_history = [x_history; x'];
end
  1. mu_init 設(shè)為 1.0,之后每次外層循環(huán)會(huì) mu = mu * mu_decay,即乘以 0.2。這樣大概迭代幾次后就會(huì)讓 mu 變得很小。
  2. alpha=0.001 是固定的梯度下降步長,相對比較小,所以我們用到 max_inner=50 步來讓它收斂到一個(gè)合適精度。
  3. 收斂閾值 tol=1e-6:若相鄰兩步 ∥ x new ? x ∥ \|x_{\text{new}}-x\| xnew??x 小于這個(gè)值,就認(rèn)為內(nèi)層已經(jīng)收斂。
  4. 每次更新 x 后都會(huì)把它記錄到 x_history 里,用于可視化迭代軌跡。

這里值得注意的是:如果單純用固定步長,可能碰到越過可行域邊界(即 (x2+y2+z^2>1))的風(fēng)險(xiǎn)。為此,代碼做了一個(gè)簡單檢查:

if h_3d(x_new) <= 1e-9x_new = x - 0.1*alpha*g;  % 步長縮小10倍
end

當(dāng)然,這只是一個(gè)很“簡單粗暴”的處理,工業(yè)級內(nèi)點(diǎn)法通常要做更精細(xì)的線搜索或牛頓校正,這里是為了示例演示。


3. 障礙函數(shù)與梯度的計(jì)算

3.1 h_3d(x)

function val = h_3d(x)val = 1.0 - (x(1)^2 + x(2)^2 + x(3)^2);
end

h ( x ) = 1 ? r 2 h(x) = 1 - r^2 h(x)=1?r2,其中 r 2 = x 1 2 + x 2 2 + x 3 2 r^2 = x_1^2 + x_2^2 + x_3^2 r2=x12?+x22?+x32?。球內(nèi)保證 h ( x ) > 0 h(x)>0 h(x)>0。

3.2 B_3d(x, mu)

function val = B_3d(x, mu)val = f_3d(x) - mu*log(h_3d(x));
end

對應(yīng)障礙目標(biāo) B ( x , μ ) = f ( x ) ? μ ln ? ( h ( x ) ) B(x,\mu) = f(x) - \mu\ln(h(x)) B(x,μ)=f(x)?μln(h(x))。

3.3 grad_B(x, mu) 的推導(dǎo)

從數(shù)學(xué)上看,如果
B ( x , μ ) = f ( x ) ? μ ln ? ( h ( x ) ) , B(x,\mu) \;=\; f(x) \;-\; \mu \,\ln\bigl(h(x)\bigr), B(x,μ)=f(x)?μln(h(x)),
則其梯度為
? B ( x , μ ) = ? f ( x ) ? μ ? ln ? ( h ( x ) ) . \nabla B(x,\mu) = \nabla f(x) \;-\; \mu \,\nabla \ln\bigl(h(x)\bigr). ?B(x,μ)=?f(x)?μ?ln(h(x)).
其中
? ln ? ( h ( x ) ) = 1 h ( x ) ? h ( x ) . \nabla \ln(h(x)) = \frac{1}{h(x)} \nabla h(x). ?ln(h(x))=h(x)1??h(x).
而 (h(x) = 1 - r^2),(\nabla h(x) = -2x)。所以
? ln ? ( h ( x ) ) = ? 2 x 1 ? r 2 . \nabla \ln(h(x)) = \frac{-2x}{1-r^2}. ?ln(h(x))=1?r2?2x?.
帶上負(fù)號“ ? μ -\mu ?μ”一起,就得到對障礙項(xiàng)的貢獻(xiàn)為 + 2 μ x 1 ? r 2 +\frac{2\mu x}{1 - r^2} +1?r22μx?。

如果我們要最小化 f ( x ) = x 1 + x 2 + x 3 f(x)= x_1 + x_2 + x_3 f(x)=x1?+x2?+x3?,其梯度就是 ( 1 , 1 , 1 ) (1,1,1) (1,1,1)。
于是
? B ( x , μ ) = ( 1 , 1 , 1 ) + 2 μ 1 ? r 2 ( x 1 , x 2 , x 3 ) . \nabla B(x,\mu) = \bigl(1,1,1\bigr) + \frac{2\mu}{1-r^2}\,\bigl(x_1,x_2,x_3\bigr). ?B(x,μ)=(1,1,1)+1?r22μ?(x1?,x2?,x3?).

在代碼中,可以看到:

function g = grad_B(x, mu)hx = h_3d(x);  % 1 - r^2dB_dx0 = 1.0 + (2.0 * mu * x(1) / hx);dB_dx1 = 1.0 + (2.0 * mu * x(2) / hx);dB_dx2 = 1.0 + (2.0 * mu * x(3) / hx);g = [dB_dx0; dB_dx1; dB_dx2];
end

正好對應(yīng)上面的公式:1.0 就是 ? f ( x ) \nabla f(x) ?f(x) 的那一部分, ( 2.0 ? m u ? x ( i ) / h x ) (2.0*mu*x(i)/hx) (2.0?mu?x(i)/hx) 對應(yīng)障礙項(xiàng)梯度那一部分。



4. 運(yùn)行與結(jié)果

如果修正了 f_3d,那么在球內(nèi)最小化 (x+y+z) 的最優(yōu)解,理論上會(huì)落在球面上與 ((1,1,1)) 方向相反的地方,也就是球面朝著 ((-1,-1,-1)) 的方向。其最優(yōu)解應(yīng)當(dāng)是

( ? 1 3 , ? 1 3 , ? 1 3 ) \left(-\frac{1}{\sqrt{3}}, \;-\frac{1}{\sqrt{3}}, \;-\frac{1}{\sqrt{3}}\right) (?3 ?1?,?3 ?1?,?3 ?1?)
因?yàn)樵诩s束 x 2 + y 2 + z 2 = 1 x^2+y^2+z^2=1 x2+y2+z2=1 上,(x+y+z) 的最小值就是 ? 3 -\sqrt{3} ?3 ?。迭代跑起來后,你應(yīng)該能看到解最終趨近這個(gè)點(diǎn),軌跡會(huì)從球心出發(fā),一路在球內(nèi)前進(jìn),并在迭代后期逐漸貼近球面。

如果把可視化部分加上(即下面這段示例):

x_history = interior_point_3d_solve();figure('Color','w','Name','Interior-Point 3D Demo');
hold on; grid on; axis equal;% 繪制單位球面
[Xs, Ys, Zs] = sphere(50);
surf(Xs, Ys, Zs, ...'FaceAlpha',0.1, 'EdgeColor','none', 'FaceColor','c');xlabel('x_0'); ylabel('x_1'); zlabel('x_2');
title('Minimize x_0 + x_1 + x_2 subject to x_0^2 + x_1^2 + x_2^2 \le 1');% 畫迭代軌跡
x0_hist = x_history(:,1);
x1_hist = x_history(:,2);
x2_hist = x_history(:,3);
plot3(x0_hist, x1_hist, x2_hist, 'b-o','LineWidth',1.5);% 最后一點(diǎn)標(biāo)紅
plot3(x0_hist(end), x1_hist(end), x2_hist(end), ...'ro', 'MarkerSize',8, 'MarkerFaceColor','r');legend('Unit Sphere','Iter Process','Final Solution');
view(35,25);

就能看到一個(gè)球面和從原點(diǎn)出發(fā),沿著負(fù)對角線方向慢慢收斂到球面那一點(diǎn)的軌跡。


5. 小結(jié)

  1. 內(nèi)點(diǎn)法原理:通過把約束 x 1 2 + x 2 2 + x 3 2 ≤ 1 x_1^2 + x_2^2 + x_3^2 \le 1 x12?+x22?+x32?1 轉(zhuǎn)化為對數(shù)障礙 ? μ ln ? ( 1 ? r 2 ) -\mu \ln\bigl(1 - r^2\bigr) ?μln(1?r2),并在外層迭代不斷減小 μ \mu μ。這能保證迭代點(diǎn)始終在球內(nèi) ( h ( x ) > 0 h(x) > 0 h(x)>0),同時(shí)在 μ → 0 \mu\to0 μ0 時(shí)逐漸收斂到可行域邊界上的最優(yōu)點(diǎn)。

  2. 實(shí)現(xiàn)細(xì)節(jié)

    • 用固定步長 + 簡單可行性校正(越界時(shí)縮步長);
    • max_outermax_inner 控制多重循環(huán);
    • tol 判斷迭代收斂;
    • 在每次迭代都記錄 xx_history 中,用于可視化。
  3. 需要修正的地方
    代碼中的 f_3d(x) 與注釋/梯度公式不一致,應(yīng)改回

    function val = f_3d(x)val = x(1) + x(2) + x(3);
    end
    

    這樣才與“最小化 (x+y+z)”的需求相吻合。

修正后運(yùn)行,即可得到一個(gè)從球心(原點(diǎn))出發(fā),最終靠近 ( ? 1 3 , ? 1 3 , ? 1 3 ) \bigl(-\frac{1}{\sqrt{3}},-\frac{1}{\sqrt{3}},-\frac{1}{\sqrt{3}}\bigr) (?3 ?1?,?3 ?1?,?3 ?1?) 的迭代過程。


參考:為什么最優(yōu)解是 ( ? 1 / 3 , ? 1 / 3 , ? 1 / 3 ) \bigl(-1/\sqrt{3},-1/\sqrt{3},-1/\sqrt{3}\bigr) (?1/3 ?,?1/3 ?,?1/3 ?)

因?yàn)樵趩挝磺蚣s束下,若要最小化 x 1 + x 2 + x 3 x_1+x_2+x_3 x1?+x2?+x3?,相當(dāng)于“在球面上找與(1,1,1)方向夾角最大的點(diǎn)”——也就是與 ( 1 , 1 , 1 ) (1,1,1) (1,1,1) 反方向的單位向量。它正好是 ? 1 3 ( 1 , 1 , 1 ) \frac{-1}{\sqrt{3}}(1,1,1) 3 ??1?(1,1,1)。目標(biāo)值是
x 1 + x 2 + x 3 = ? 3 . x_1 + x_2 + x_3 = -\sqrt{3}. x1?+x2?+x3?=?3 ?.
這與幾何直覺、拉格朗日乘子法都能得到一樣的結(jié)果。


6. 結(jié)語

  • 該代碼很好地演示了使用對數(shù)障礙(log-barrier)的內(nèi)點(diǎn)法思路:用一系列的無約束子問題(帶障礙項(xiàng))來逼近有約束優(yōu)化,并在外層迭代中逐漸減小障礙系數(shù) (\mu),使解貼近約束邊界的最優(yōu)解。
  • 不過,在正式應(yīng)用時(shí),往往不會(huì)用固定步長的簡單梯度下降,而會(huì)用牛頓法或線搜索,以獲得更好的數(shù)值穩(wěn)定性和收斂速度。
  • 代碼本身最大的問題是 f_3d 與注釋/公式不匹配,只要改回 f_3d(x) = x(1)+x(2)+x(3) 即可與文檔保持一致,也能正確體現(xiàn)“最小化 ∑ x i \sum x_i xi?”的意圖。

在使用對數(shù)障礙(log‐barrier)形式的內(nèi)點(diǎn)法時(shí), μ \mu μ(有時(shí)也記作 t t t ν \nu ν)通常被稱為障礙參數(shù)(barrier parameter)。它的核心作用是:

  1. 控制對數(shù)障礙項(xiàng)的“強(qiáng)度”
    在障礙型目標(biāo)函數(shù)
    B ( x , μ ) = f ( x ) ? μ ln ? ( h ( x ) ) B(x,\mu) \;=\; f(x)\;-\;\mu \,\ln\bigl(h(x)\bigr) B(x,μ)=f(x)?μln(h(x))
    中,(\mu) 決定了 (-\mu \ln\bigl(h(x)\bigr)) 這部分懲罰力度的大小。

    • 當(dāng) (\mu) 較大時(shí),對(\ln(h(x)))的懲罰力度相對較小,算法對靠近約束邊界的“敏感度”不高,所以在收斂初期可以更自由地在可行域里移動(dòng)。
    • 當(dāng) (\mu) 變小時(shí),(-\mu \ln(h(x)))會(huì)變得更尖銳,迫使解更加貼近且“貼合”可行域的邊界(若這是最優(yōu)解所在的位置)。
  2. 幫助逐步逼近最優(yōu)解并保持可行
    內(nèi)點(diǎn)法的思路是:一開始用較大的 (\mu)(障礙作用較弱)來保證算法穩(wěn)步地在可行域里進(jìn)行搜索;之后在外層循環(huán)中逐步減小 (\mu),使對數(shù)障礙項(xiàng)逐漸變得陡峭,從而把解“推”到真正需要的邊界附近并逼近最優(yōu)解。

  3. 數(shù)值上的平衡

    • 如果 (\mu) 過小,一開始 (-\mu \ln(h(x))) 的勢壘就會(huì)非常強(qiáng),導(dǎo)致很難在可行域里移動(dòng),且容易產(chǎn)生數(shù)值不穩(wěn)定(如(\ln(h(x)))趨向負(fù)無窮)。
    • 如果 (\mu) 過大,到收斂后期也無法精確地在邊界附近找到最優(yōu)解。所以通常會(huì)有一條**“(\mu)衰減”路徑**(比如 (\mu \leftarrow \beta \mu),(\beta<1))來讓解逐步逼近最優(yōu)值。

簡而言之:(\mu) 是控制“障礙強(qiáng)度”的調(diào)節(jié)器。隨著 (\mu) 從大到小的不斷衰減,解會(huì)逐漸向可行域邊界靠攏并最終獲得精確的約束最優(yōu)解。

在這里插入圖片描述


完整代碼

function x_history = interior_point_3d_solve()
%{使用內(nèi)點(diǎn)法(障礙函數(shù) + 固定步長梯度下降)求解:min  f(x) = x(1) + x(2) + x(3)s.t. x(1)^2 + x(2)^2 + x(3)^2 <= 1.內(nèi)點(diǎn)法: 定義障礙型目標(biāo)B(x, mu) = f(x) - mu * log( h(x) ), 其中h(x) = 1 - (x0^2 + x1^2 + x2^2).輸出:x_history: 每個(gè)迭代得到的 (x0, x1, x2).
%}% 參數(shù)mu_init = 1.0;      % 初始障礙參數(shù)mu_decay = 0.2;     % 每輪迭代后 mu 的衰減因子alpha = 0.001;       % 梯度下降步長tol = 1e-6;         % 收斂閾值max_outer = 10;     % 外層循環(huán)(更新 mu)次數(shù)max_inner = 50;     % 每次 mu 下最大迭代次數(shù)% 初始化可行解 (x0, x1, x2),球內(nèi),例如原點(diǎn)x = [0; 0; 0];  mu = mu_init;x_history = [];for outer = 1:max_outerfor inner = 1:max_innerg = grad_B(x, mu);  % 計(jì)算梯度x_new = x - alpha*g;% 如果越過球邊界 => h(x_new) <= 0 => x_new^2+y^2+z^2 >=1% 簡單地縮小步長再試if h_3d(x_new) <= 1e-9x_new = x - 0.1*alpha*g;end% 收斂判斷if norm(x_new - x) < tolx = x_new;break;endx = x_new;x_history = [x_history; x']; % 記錄軌跡(行向量)end% 降低 mu 使解更逼近約束邊界mu = mu * mu_decay;if mu < 1e-12break;endend% 最后再將最終點(diǎn)加入x_history = [x_history; x'];
end%% 目標(biāo)函數(shù) f(x)
function val = f_3d(x)% f(x0, x1, x2) = x0 + x1 + x2val = x(1) + x(2) + x(3);
end%% 障礙函數(shù)項(xiàng) h(x) = 1 - (x0^2 + x1^2 + x2^2)
function val = h_3d(x)val = 1.0 - (x(1)^2 + x(2)^2 + x(3)^2);
end%% 障礙型目標(biāo) B(x, mu) = f(x) - mu*ln(h(x))
function val = B_3d(x, mu)val = f_3d(x) - mu*log(h_3d(x));
end%% B(x, mu) 的梯度
function g = grad_B(x, mu)
%{B(x) = (x0 + x1 + x2) - mu * ln(1 - r^2),其中 r^2 = x0^2 + x1^2 + x2^2=> dB/dx0 = 1 + [2 mu x0 / (1 - r^2)]=> dB/dx1 = 1 + [2 mu x1 / (1 - r^2)]=> dB/dx2 = 1 + [2 mu x2 / (1 - r^2)]
%}hx = h_3d(x);r2 = x(1)^2 + x(2)^2 + x(3)^2;% hx = 1 - r2 > 0  (只要在球內(nèi))dB_dx0 = 1.0 + (2.0 * mu * x(1) / hx);dB_dx1 = 1.0 + (2.0 * mu * x(2) / hx);dB_dx2 = 1.0 + (2.0 * mu * x(3) / hx);g = [dB_dx0; dB_dx1; dB_dx2];
end%{演示如何在 3D 中用“障礙函數(shù) + 簡單梯度下降”的內(nèi)點(diǎn)法來最小化 f(x) = x0 + x1 + x2subject to x0^2 + x1^2 + x2^2 <= 1.可行域是單位球 (x0^2 + x1^2 + x2^2 <= 1)。我們會(huì)在圖中繪制球面,并用散點(diǎn)繪制迭代軌跡。
%}% 1) 調(diào)用求解函數(shù),得到每步迭代的解 x(k)
x_history = interior_point_3d_solve();% 2) 可視化
figure('Color','w','Name','Interior-Point 3D Demo');
hold on; grid on; axis equal;  % 3D 坐標(biāo)中,最好設(shè) axis equal% 2.1 繪制單位球面(x0^2 + x1^2 + x2^2 = 1)
[Xs, Ys, Zs] = sphere(50);  
% sphere() 生成一個(gè)半徑為 1 的球面網(wǎng)格
surf(Xs, Ys, Zs, 'FaceAlpha',0.1, 'EdgeColor','none', 'FaceColor','c');
% 給球面一個(gè)半透明的青色xlabel('x_0'); ylabel('x_1'); zlabel('x_2');
title('Minimize x_0 + x_1 + x_2 subject to x_0^2 + x_1^2 + x_2^2 \le 1');% 2.2 繪制迭代軌跡
x0_hist = x_history(:,1);
x1_hist = x_history(:,2);
x2_hist = x_history(:,3);nPoints = size(x_history,1);
if nPoints > 1% 中間過程點(diǎn)用藍(lán)色散點(diǎn)plot3(x0_hist(1:end-1), x1_hist(1:end-1), x2_hist(1:end-1), ...'bo-', 'LineWidth',1.5, 'MarkerSize',4, 'MarkerFaceColor','b');
end% 最后一點(diǎn)用紅色標(biāo)記
plot3(x0_hist(end), x1_hist(end), x2_hist(end), ...'ro', 'MarkerSize',8, 'MarkerFaceColor','r');legend('Unit Sphere (Constraint)', 'Iter Process', 'Final Solution');
view(35, 25);  % 調(diào)整3D視角
http://m.risenshineclean.com/news/63936.html

相關(guān)文章:

  • 建設(shè)公司網(wǎng)站要注意哪些杭州網(wǎng)站排名提升
  • 化妝品網(wǎng)站建設(shè)項(xiàng)目計(jì)劃書今日新聞?lì)^條
  • wordpress建站速度提升免費(fèi)推廣途徑與原因
  • 深圳網(wǎng)站設(shè)計(jì)價(jià)格表優(yōu)化大師下載舊版本安裝
  • 山東德州如何網(wǎng)站建設(shè)教程qq群排名優(yōu)化
  • 廣州做和改版網(wǎng)站的公司網(wǎng)上賣貨的平臺有哪些
  • 好用的wordpress代碼編輯器河南seo外包
  • phpcms 做購物網(wǎng)站谷歌seo優(yōu)化公司
  • html京東頁面制作深圳seo優(yōu)化排名優(yōu)化
  • 貴陽 網(wǎng)站建設(shè)推廣百度百科
  • 廊坊哪些公司做網(wǎng)站百度商家版下載
  • 一線城市網(wǎng)站建設(shè)費(fèi)用高長春網(wǎng)站seo公司
  • 怎么快速開發(fā)一個(gè)網(wǎng)站典型的網(wǎng)絡(luò)營銷案例
  • 教做衣服的網(wǎng)站有哪些網(wǎng)頁搜索
  • 越城網(wǎng)站建設(shè)公司陜西網(wǎng)站建設(shè)網(wǎng)絡(luò)公司
  • 煙臺專業(yè)做網(wǎng)站公司有哪些微博推廣技巧
  • 純文本網(wǎng)站連接北京建站公司
  • 禁用wordpress插件更新網(wǎng)站關(guān)鍵詞優(yōu)化公司
  • 自個(gè)做網(wǎng)站教程濰坊快速網(wǎng)站排名
  • 上海專業(yè)網(wǎng)站推廣公司長春網(wǎng)站優(yōu)化咨詢
  • 滄州網(wǎng)站建設(shè)制作設(shè)計(jì)優(yōu)化百度瀏覽器電腦版
  • 網(wǎng)站設(shè)計(jì)建設(shè)公司廣州seo優(yōu)化排名公司
  • 在線做漢字頭像的網(wǎng)站合肥瑤海區(qū)
  • 風(fēng)水網(wǎng)站開發(fā)登錄注冊入口
  • 網(wǎng)站換空間 百度快照倒退一年多 怎么回事百度搜索指數(shù)排行榜
  • 做網(wǎng)站資源知乎seo關(guān)鍵詞挖掘工具
  • 網(wǎng)站開發(fā)主管待遇優(yōu)化大師安卓版
  • 建正建設(shè)官方網(wǎng)站友情鏈接有什么用
  • 湖南做網(wǎng)站問磐石網(wǎng)絡(luò)專業(yè)鞏義網(wǎng)絡(luò)推廣外包
  • 宿州做企業(yè)網(wǎng)站學(xué)生制作個(gè)人網(wǎng)站