交叉熵方法(Cross-Entropy Method )邂逅組合優化

2021-02-13 黃含馳

從《The Cross-Entropy Method A Unified Approach to Combinatorial Optimization, Monte-Carlo Simulation, and Machine Learning 》一書總結和COP、ML相關的精華+對其他相關paper的解讀~

大綱

Motivation of CEM指數族Generating Random VariablesCEM公式推導及在item placement上的應用、The TLR MethodCEM for Max-Cut Problem CEM for TSP、Speeding up Trajectory Generation of CEM for TSP使用最佳樣本的CEM的收斂性CEM for Sequence Alignment ProblemThe Markov Decision Process and Reinforcement Learning CEM代碼實戰CEM+constraints技巧、理論分析對CEM的細微改進,持續更新CEM文獻整理、資料安利Future Work

Motivation of CEM

運籌學中的許多日常任務涉及解決複雜的優化問題。旅行商問題(TSP),二次分配問題(QAP)和最大割問題是組合優化問題(COP)的代表性示例,這些問題的結構是完全已知的且是靜態的。相比之下,緩衝區分配問題(BAP)是一個嘈雜的估計問題,需要對未知目標函數進行估計。 離散事件模擬是一種估計未知目標函數的方法,近年來隨機算法特別是交叉熵(CE)越來越流行。CE方法的名稱來KL散度,這是現代資訊理論的基本概念。該方法是由自適應算法驅動的,用於估計複雜隨機網絡中稀有事件的概率(涉及方差最小化)。很快The cross-entropy method for combinatorial and continuous optimization、Combinatorial optimization, cross-entropy, ants and rare events意識到,對Optimization of computer simulation models with rare events的簡單修改,涉及到CE最小化,它不僅可以用於估計稀有事件的概率,還可以用於解決困難的組合優化和連續的多極值問題( 通過將原始的「確定性」優化問題轉換為相關的「隨機」估計問題,然後應用類似於Optimization of computer simulation models with rare events的罕見事件模擬機制)。簡言之,CE方法涉及一個兩階段迭代過程:

1.根據指定的機制生成隨機數據樣本(軌跡,向量等)。

2.根據數據更新隨機機制的參數,以在下一次迭代中生成「更好」的樣本。

這種新方法的強大功能和普遍性在於,更新規則通常是簡單明了的(因此速度很快),並且"optimal" in some well-defined mathematical sense。另外,CE方法為仿真和優化提供了統一方法,且在新領域的開拓上有著巨大的力。

CE方法的應用越來越多。有關CE方法應用的最新出版物包括:緩衝區分配[9];靜態仿真模型[85];電信系統的排隊模型[43、46];神經計算[50];控制和導航[83];DNA序列比對[98];信號處理[110];調度[113];車輛路線[36];強化學習[117];項目管理[37];重尾分布[15,103];  CE融合[114];網絡可靠性[87];可修復系統[137];最大割和分割問題[147]。

注意:

1.CE方法可以成功處理確定/嘈雜(eg:目標函數被加性「噪聲」「破壞」,這種情況通常發生在基於仿真的問題如緩衝區分配問題中)的問題。

2.CE主頁包含許多連結,文章,參考,教程和電腦程式,可在以下網站找到:http://www.cemethod.org/

指數族

Generating Random Variables

本節我們簡要描述幾種從指定分布中生成隨機變量的方法。

1.The Inverse-Transform Method  

通常,逆變換方法要求cdf F的逆函數可以比較容易被推算出來。適用的分布是指數分布,均勻分布,威布爾分布,對數分布和柯西分布……

對於離散的m點隨機變量,可以將逆變換方法編寫如下:

離散分布的逆變換方法--算法1.7.2

算法1.7.2中的大部分執行時間都花在了步驟2的比較上。我們可通過有效的搜索技術減少時間。參見Non-Uniform Random Variate generation。

逆變換方法可以輕鬆擴展到來自給定聯合cdf F(x)的獨立隨機變量的隨機向量X =(Xb ...,Xn)。在這種情況下,我們僅將方法分別應用於每個組件。

對於dependent變量,由於它需要了解Xi的邊際和條件分布,因此其適用性非常有限。

2.Alias Method

Alias Method 方法不需要像算法1 7.2的步驟2那樣費時地搜索。它基於以下事實:

Alias Method 方法相當通用且有效,但是需要為n-1個pdf g(k)進行初始setting和額外的存儲。可以在Non-Uniform Random Variate generationcon中找到計算two-point pdf g(k),k = 1,...,n-1的過程。一旦建立了(1.45),generation from f 就很簡單,並且 可以寫成:

3.The Composition Method

The Composition Method 假設cdf F可以表示為不同cdf H_i的組合

因此,為了根據F生成X,我們必須首先生成上面給出的離散隨機變量Y,然後給定Y = i,從Hi生成Xi:

4 The Acceptance-Rejection Method

從直接處理要生成的隨機變量的cdf的意義上來說,逆變換和合成方法是直接方法。不幸的是,對於許多概率分布,逆變換很難或不可能找到。即使逆變換F-1以顯式形式存在,逆變換方法也不一定是最有效的變量生成方法。當上述直接方法失敗或被證明計算效率低下時,可以使用由約翰·馮·諾伊曼(John von Neumann)提出的一種間接方法,即接受拒絕方法(ARM)。

要執行ARM,我們需要指定(1)容易根據h生成隨機變量的pdf h,以及(2)常數C>=1,使得對所有x都有C h(x)>=f(x)  。因此,我們將f(x)表示為

根據ARM,我們獨立生成兩個隨機變量,服從U(O,1)的U和服從h(y)的Y,並測試不等式U<=g(Y)。如果不等式成立,那麼我們接受Y作為來自f(x)的必需隨機變量;否則,我們拒絕pair (U, Y),然後重試直到獲得成功的pair (U, Y):

證明

接受拒絕方法的效率由接受概率p = P(U<=g(Y))= 1 / C決定(。請注意,在成功配對(U,Y)出現之前,試驗次數服從幾何分布,

為了使該方法具有實際意義,在選擇h(x)時必須使用以下標準:

1.從h(x)生成隨機變量應該很容易。

2.1 / C不應太小,即h(x)應該與f(x)「接近」。

使用相同的推理,算法1. 7.5直接適用於多維情況。我們只需記住,此時Y(參閱算法1.7.5的步驟2)變成n維(而不是一維)隨機向量。因此,我們需要一種從多維pdf h(y)生成Y的便捷方法。注意,如果h(x)≠ f(x),則ARM的效率會隨著n急劇降低。實際上,它只能用於n <10( 參見Modern Simulation and Modeling)。

CEM公式推導及在item placement上的應用

進化策略優化算法CEM(Cross Entropy Method)介紹!https://blog.csdn.net/ppp8300885/article/details/80567682

其中的黑箱猜數代碼:

from scipy.stats import binom
import numpy as np
import copy
n=10
N=50
y=np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])#np.random.choice([0,1],size=n)
p=np.array([0.5]*n)
def S(x):
return n-np.linalg.norm(x-y,ord=1)
rho=1
eps=1e-6
jitter=1e-1
x=[]
score=[]
for _ in range(N):
tmp=[np.random.choice([0,1],size=1,p=[1-p[i],p[i]])[0] for i in range(n)]
x.append(tmp)
score.append(S(tmp))
x=np.array(x)
elite=np.argwhere(np.array(score)>=np.percentile(sorted(score),100-rho))
p_old=p.copy()
tmp=x[elite].reshape([len(elite),n]).T
for i in range(n):
p[i]=np.sum(tmp[i])/len(elite)
t=1

while t<30:#sum([min(1-p[i],p[i]) for i in range(n)])>eps:
x=[]
score=[]
for _ in range(N):
tmp=[np.random.choice([0,1],size=1,p=[1-p[i],p[i]])[0] for i in range(n)]
x.append(tmp)
score.append(S(tmp))
x=np.array(x)
elite=np.argwhere(np.array(score)>=np.percentile(sorted(score),100-rho))
tmp=x[elite].reshape([len(elite),n]).T
for i in range(n):
p[i]=max(min(np.sum(tmp[i])/len(elite),1-jitter),jitter)
print(p)
t+=1
if t%20==0:
print(t)

交叉熵進化算法+PPO求解設備放置問題 nips論文簡讀 - 微塵-黃含馳的文章 - 知乎 https://zhuanlan.zhihu.com/p/182578237

The TLR Method

變換似然比transform likelihood ratio (TLR)方法是一種構建適用於輕/重尾分布的有效IS估計量

的簡單、便捷和統一的方法。詳情見《The Cross-Entropy Method A Unified Approach to Combinatorial Optimization, Monte-Carlo Simulation, and Machine Learning 》P91~

CEM for Max-Cut Problem

最大割問題可以表示如下:

給定具有節點集V = {1,...,n}和邊集E的加權圖G(V,E),將圖的節點劃分為兩個子集v1和v2,以最大化使從一個子集到另一個子集的邊權重之和。(NP難!)

假設權重非負,且不失一般性+簡單起見,假設圖G是完全且無向的。令非負對稱成本矩陣C =(Cij)表示邊權重。

形式上,一個 cut就是指V的一個分割{V1,V2}。例如,如果V = {1,...,6},則{{1,3,4},{2,5,6}}是一個可能的 cut。cut的成本是整個cut的權重之和。例如,請考慮以下6 x 6成本矩陣

通過割矢量x =(x1,...,xn)表示cut將很方便,如果節點i與1屬於同一分區,則Xi = 1,否則為0。(根據定義x1 =1)例如,cut {{1,3,4},{2,5,6}}可以通過割矢量(1、0、1、1、0、0)表示。

令花體X為所有割矢量x =(1,x2,,••,Xn)的集合,令S(x)為割的相應成本。我們希望通過CE方法最大化S。

因此,(a)我們需要指定隨機切割矢量的生成方式,(b)計算相應的更新公式。生成剪切向量的最自然最簡單的方法是,使X2,...,Xn為獨立的伯努利隨機變量,其成功概率為p2,...,pn:

A Synthetic Max-Cut Problem

由於最大割問題NP難,因此不存在解決最大割問題的有效方法。天真的總枚舉例程僅適用於小圖(如n<=30的圖)。儘管分支定界啟發式方法可以精確地解決中等大小的問題,但是當n變大時,它也會遇到問題。

為了驗證CE方法的準確性,我們構建了一個人工圖以便可以提前獲得解。特別地,對於m {1,...,n},考慮以下對稱成本矩陣:

Z11是mxm對稱矩陣,所有上對角元素均由U(a,b)分布生成(所有下對角元素均遵循對稱性),Z22是(n-m)x(n-  m)對稱矩陣,元素生成方式與Z11類似,除對角元素(0)之外,C的所有其他元素均為c。

當然,如果Z11和Z22中的元素是通過任意有界支撐分布生成的,且支撐的最大值小於c,我們也可以找到相似的最佳解和最佳值。

表2.3列出了對於有n = 400個節點的網絡,CEM算法的典型輸出:

注-partition的另一種生成方式

書中給出的代碼P275,也許有點舊

% A Matlab demonstration of the CE method for
% solving the synthetic MAXCUT problem
clear
% Setting parameters
m = 200; % (2m nodes total)
N = 1000; % sample size
rho= 0.1;
maxiters=23; % Number of iterations
% set random seed
rand('state',1234);
% first construct a random cost matrix
Z11 = rand(m);
for i = 1:m,
for j =i:m,
Z11(j,i) Z11(i,j);
end;
Z11(i,i) 0;
end
Z22 = rand(m);
for i = 1:m,
for j =i:m,
Z22(j,i) Z22(i,j);
end;
Z22(i,i) O· '
end
B12 ones(m);
B21 = ones(m);
C = [Z11 B12; B21 Z22]; %cost matrix
% Calculating optimal score
optp = [ones(1,m),zeros(1,m)]
y rand(1,2*m);
A.2 The Max-Cut Problem 275
x = (y <optp); %generate cut vector, according top
s = scut(C,x);
fprintf('Best score %f\n',s)
%Initializing
p = 1/2 *ones (1,2*m);
p(1) = 1;
gammas= zeros(1,max!ters);
curbests = zeros(1,max!ters);
ps = zeros(max!ters,2*m);
pdist = zeros(1,max!ters);
tic
curbest=O.O;
for j=(1:max!ters) %main CE loop
j % output interation number
% generate matrix X of cutvectors
Y = rand(N,2*m);
X= (Y < ones(N,1)*p);
g = zeros(N,1);
for i=1:N
g(i,:) = scut(C,X(i,:));
end
[sortcut,sortidx] = sort(g);
% update gamma
% sortidx(1) contains index of the smallest
% cutvector
eidx = ceil((1-rho)*N); %smallest index of best
gamma= sortcut(eidx);
curbest = max(curbest,sortcut(end)) %keep track of best result
gammas(j)=gamma;
curbests(j) = curbest;
pdist(j) = min(norm(p -optp),norm(p- -optp));
% update p on basis of elite vectors, that is, the vectors
% X(sortidx(eidx),:) to X(sortidx(N),:)
for i=1:2*m
p(i)= sum(X(sortidx(eidx:N),i))/(N-eidx+1);
end
ps(j':) = p;
end
toe %end timing
% gammas is the calculated gamma
% pdist is the distance from the optimal p
finalp = p
fprintf('Calculated best score %f\n',curbest);
figure(1);
plot(1:max!ters,gammas);
xlabel('t');ylabel('\gamma_t');
figure(4);
plot(1:max!ters,pdist);
xlabel('Number of iteration');ylabel('l lp-p_o_p_t I 1_2');
figure(2);
subplot(10,1,1); bar(1/2*ones(1,2*m));
for j=1:9
subplot(10,1,j+1); bar(ps(j,:));
end
figure(3);
for j=1:10
subplot(10,1,j); bar(ps(j+9,:));
end
for i = 1:max!ters
fprintf('%d %f %f %f\n',i,gammas(i),curbests(i), pdist(i));
end
function [perf] = scut(C,x)
Vi= find(x);% {V1,V2} is the partition
V2 = find(-x);
perf = sum(sum(C(V1,V2))); %the size of the cut

CEM for TSP

粗糙翻譯--假定該圖是完整的,即每個節點都相互連接是很方便的。請注意,這不會導致通用性下降,因為對於不完整的圖,我們總是可以以無限的成本添加其他邊而不會影響最小行程。如圖4.5所示,並帶有相應的成本矩陣

x = ( x1 , ... , Xn)

粗糙翻譯--備註4.10(向前和向後循環) 對於具有對稱成本矩陣C的TSP,始終至少存在兩個最優行程。例如,如果在圖4.5中成本矩陣是對稱的,並且(1、2、3、5、4、6)是最佳行程,則(1、6、4、5、3、2)也是 最佳遊覽。我們可以將一個巡視稱為前進巡視,將另一個巡視稱為後退巡視。為了區分前進和後退,可以使用以下簡單規則:對於前向巡視X2 <Xn,對於後退巡視X2> Xn·

路徑長表達示例

粗糙翻譯--我們的目標是使用CE方法在集合X上最小化(4.32)中的S。為了使S最小,我們需要指定一種用於生成隨機遊覽x的機制,並且像往常一樣,採用基本的交叉熵算法4.2.1來更新與此機制關聯的分布的參數。考慮到旅行商問題提出了SEN-Stochastic Edge Network 型優化問題,我們現在提出第一個隨機軌跡生成算法,該算法基於通過網絡節點的過渡。更具體地,為了生成隨機遊程X =(XI。...,Xn),我們使用n x n轉移概率矩陣P,然後根據算法2.5.1進行處理,為便於參考,下面將其重複用作算法4.7.1。回想一下,像往常一樣,我們在軌跡生成算法中包括了目標函數計算的額外步驟。

①generate trajectories either via node transitions

詳細版本

②generate trajectories either via node placements

對應於以下事件:節點i站在置換的第j位。

(區別主要在step 4、step 5的if條件上)

我們可以使用alias方法來加速軌跡生成。在這種情況下,需要考慮初始設置和額外的存儲,但由於別名方法非常快,因此對大的n,相比逆變換和接受/拒絕方法,我們優先考慮alias方法。對於TSP和生成類似解的問題,我們使用了alias、接受-拒絕和逆變換方法的組合,如下所述。

請注意,我們的目標是使用概率矩陣P生成n個數字的排列。為簡單起見,請考慮算法4.11.2,即,使用P中的第i行生成排列中的第i個數字。使用alias方法和接受拒絕方法的組合生成數字的前x%。使用逆變換方法生成其餘數字。令Alias(i,P)表示通過別名方法使用P中的第i行生成的隨機數。

其中的黑箱猜數代碼:

from scipy.stats import binom
import numpy as np
import copy
n=10
N=50
y=np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])#np.random.choice([0,1],size=n)
p=np.array([0.5]*n)
def S(x):
return n-np.linalg.norm(x-y,ord=1)
rho=1
eps=1e-6
jitter=1e-1
x=[]
score=[]
for _ in range(N):
tmp=[np.random.choice([0,1],size=1,p=[1-p[i],p[i]])[0] for i in range(n)]
x.append(tmp)
score.append(S(tmp))
x=np.array(x)
elite=np.argwhere(np.array(score)>=np.percentile(sorted(score),100-rho))
p_old=p.copy()
tmp=x[elite].reshape([len(elite),n]).T
for i in range(n):
p[i]=np.sum(tmp[i])/len(elite)
t=1

while t<30:#sum([min(1-p[i],p[i]) for i in range(n)])>eps:
x=[]
score=[]
for _ in range(N):
tmp=[np.random.choice([0,1],size=1,p=[1-p[i],p[i]])[0] for i in range(n)]
x.append(tmp)
score.append(S(tmp))
x=np.array(x)
elite=np.argwhere(np.array(score)>=np.percentile(sorted(score),100-rho))
tmp=x[elite].reshape([len(elite),n]).T
for i in range(n):
p[i]=max(min(np.sum(tmp[i])/len(elite),1-jitter),jitter)
print(p)
t+=1
if t%20==0:
print(t)

交叉熵進化算法+PPO求解設備放置問題 nips論文簡讀 - 微塵-黃含馳的文章 - 知乎 https://zhuanlan.zhihu.com/p/182578237

The TLR Method

變換似然比transform likelihood ratio (TLR)方法是一種構建適用於輕/重尾分布的有效IS估計量

的簡單、便捷和統一的方法。詳情見《The Cross-Entropy Method A Unified Approach to Combinatorial Optimization, Monte-Carlo Simulation, and Machine Learning 》P91~

CEM for Max-Cut Problem

最大割問題可以表示如下:

給定具有節點集V = {1,...,n}和邊集E的加權圖G(V,E),將圖的節點劃分為兩個子集v1和v2,以最大化使從一個子集到另一個子集的邊權重之和。(NP難!)

假設權重非負,且不失一般性+簡單起見,假設圖G是完全且無向的。令非負對稱成本矩陣C =(Cij)表示邊權重。

形式上,一個 cut就是指V的一個分割{V1,V2}。例如,如果V = {1,...,6},則{{1,3,4},{2,5,6}}是一個可能的 cut。cut的成本是整個cut的權重之和。例如,請考慮以下6 x 6成本矩陣

通過割矢量x =(x1,...,xn)表示cut將很方便,如果節點i與1屬於同一分區,則Xi = 1,否則為0。(根據定義x1 =1)例如,cut {{1,3,4},{2,5,6}}可以通過割矢量(1、0、1、1、0、0)表示。

令花體X為所有割矢量x =(1,x2,,••,Xn)的集合,令S(x)為割的相應成本。我們希望通過CE方法最大化S。

因此,(a)我們需要指定隨機切割矢量的生成方式,(b)計算相應的更新公式。生成剪切向量的最自然最簡單的方法是,使X2,...,Xn為獨立的伯努利隨機變量,其成功概率為p2,...,pn:

A Synthetic Max-Cut Problem

由於最大割問題NP難,因此不存在解決最大割問題的有效方法。天真的總枚舉例程僅適用於小圖(如n<=30的圖)。儘管分支定界啟發式方法可以精確地解決中等大小的問題,但是當n變大時,它也會遇到問題。

為了驗證CE方法的準確性,我們構建了一個人工圖以便可以提前獲得解。特別地,對於m {1,...,n},考慮以下對稱成本矩陣:

Z11是mxm對稱矩陣,所有上對角元素均由U(a,b)分布生成(所有下對角元素均遵循對稱性),Z22是(n-m)x(n-  m)對稱矩陣,元素生成方式與Z11類似,除對角元素(0)之外,C的所有其他元素均為c。

當然,如果Z11和Z22中的元素是通過任意有界支撐分布生成的,且支撐的最大值小於c,我們也可以找到相似的最佳解和最佳值。

表2.3列出了對於有n = 400個節點的網絡,CEM算法的典型輸出:

注-partition的另一種生成方式

書中給出的代碼P275,也許有點舊

% A Matlab demonstration of the CE method for
% solving the synthetic MAXCUT problem
clear
% Setting parameters
m = 200; % (2m nodes total)
N = 1000; % sample size
rho= 0.1;
maxiters=23; % Number of iterations
% set random seed
rand('state',1234);
% first construct a random cost matrix
Z11 = rand(m);
for i = 1:m,
for j =i:m,
Z11(j,i) Z11(i,j);
end;
Z11(i,i) 0;
end
Z22 = rand(m);
for i = 1:m,
for j =i:m,
Z22(j,i) Z22(i,j);
end;
Z22(i,i) O· '
end
B12 ones(m);
B21 = ones(m);
C = [Z11 B12; B21 Z22]; %cost matrix
% Calculating optimal score
optp = [ones(1,m),zeros(1,m)]
y rand(1,2*m);
A.2 The Max-Cut Problem 275
x = (y <optp); %generate cut vector, according top
s = scut(C,x);
fprintf('Best score %f\n',s)
%Initializing
p = 1/2 *ones (1,2*m);
p(1) = 1;
gammas= zeros(1,max!ters);
curbests = zeros(1,max!ters);
ps = zeros(max!ters,2*m);
pdist = zeros(1,max!ters);
tic
curbest=O.O;
for j=(1:max!ters) %main CE loop
j % output interation number
% generate matrix X of cutvectors
Y = rand(N,2*m);
X= (Y < ones(N,1)*p);
g = zeros(N,1);
for i=1:N
g(i,:) = scut(C,X(i,:));
end
[sortcut,sortidx] = sort(g);
% update gamma
% sortidx(1) contains index of the smallest
% cutvector
eidx = ceil((1-rho)*N); %smallest index of best
gamma= sortcut(eidx);
curbest = max(curbest,sortcut(end)) %keep track of best result
gammas(j)=gamma;
curbests(j) = curbest;
pdist(j) = min(norm(p -optp),norm(p- -optp));
% update p on basis of elite vectors, that is, the vectors
% X(sortidx(eidx),:) to X(sortidx(N),:)
for i=1:2*m
p(i)= sum(X(sortidx(eidx:N),i))/(N-eidx+1);
end
ps(j':) = p;
end
toe %end timing
% gammas is the calculated gamma
% pdist is the distance from the optimal p
finalp = p
fprintf('Calculated best score %f\n',curbest);
figure(1);
plot(1:max!ters,gammas);
xlabel('t');ylabel('\gamma_t');
figure(4);
plot(1:max!ters,pdist);
xlabel('Number of iteration');ylabel('l lp-p_o_p_t I 1_2');
figure(2);
subplot(10,1,1); bar(1/2*ones(1,2*m));
for j=1:9
subplot(10,1,j+1); bar(ps(j,:));
end
figure(3);
for j=1:10
subplot(10,1,j); bar(ps(j+9,:));
end
for i = 1:max!ters
fprintf('%d %f %f %f\n',i,gammas(i),curbests(i), pdist(i));
end
function [perf] = scut(C,x)
Vi= find(x);% {V1,V2} is the partition
V2 = find(-x);
perf = sum(sum(C(V1,V2))); %the size of the cut

CEM for TSP

粗糙翻譯--假定該圖是完整的,即每個節點都相互連接是很方便的。請注意,這不會導致通用性下降,因為對於不完整的圖,我們總是可以以無限的成本添加其他邊而不會影響最小行程。如圖4.5所示,並帶有相應的成本矩陣

x = ( x1 , ... , Xn)

粗糙翻譯--備註4.10(向前和向後循環) 對於具有對稱成本矩陣C的TSP,始終至少存在兩個最優行程。例如,如果在圖4.5中成本矩陣是對稱的,並且(1、2、3、5、4、6)是最佳行程,則(1、6、4、5、3、2)也是 最佳遊覽。我們可以將一個巡視稱為前進巡視,將另一個巡視稱為後退巡視。為了區分前進和後退,可以使用以下簡單規則:對於前向巡視X2 <Xn,對於後退巡視X2> Xn·

路徑長表達示例

粗糙翻譯--我們的目標是使用CE方法在集合X上最小化(4.32)中的S。為了使S最小,我們需要指定一種用於生成隨機遊覽x的機制,並且像往常一樣,採用基本的交叉熵算法4.2.1來更新與此機制關聯的分布的參數。考慮到旅行商問題提出了SEN-Stochastic Edge Network 型優化問題,我們現在提出第一個隨機軌跡生成算法,該算法基於通過網絡節點的過渡。更具體地,為了生成隨機遊程X =(XI。...,Xn),我們使用n x n轉移概率矩陣P,然後根據算法2.5.1進行處理,為便於參考,下面將其重複用作算法4.7.1。回想一下,像往常一樣,我們在軌跡生成算法中包括了目標函數計算的額外步驟。

①generate trajectories either via node transitions

詳細版本

②generate trajectories either via node placements

對應於以下事件:節點i站在置換的第j位。

(區別主要在step 4、step 5的if條件上)

我們可以使用alias方法來加速軌跡生成。在這種情況下,需要考慮初始設置和額外的存儲,但由於別名方法非常快,因此對大的n,相比逆變換和接受/拒絕方法,我們優先考慮alias方法。對於TSP和生成類似解的問題,我們使用了alias、接受-拒絕和逆變換方法的組合,如下所述。

請注意,我們的目標是使用概率矩陣P生成n個數字的排列。為簡單起見,請考慮算法4.11.2,即,使用P中的第i行生成排列中的第i個數字。使用alias方法和接受拒絕方法的組合生成數字的前x%。使用逆變換方法生成其餘數字。令Alias(i,P)表示通過別名方法使用P中的第i行生成的隨機數。



相關焦點

  • 強化學習之cross-entropy method
    cross-entropy方法(CEM)是一種用於重要性採樣和優化的蒙特卡洛方法。它適用於靜態或噪聲目標的組合問題和連續問題[1]。該方法通過重複兩個階段來近似最佳的重要性採樣估計器:從概率分布中抽取樣本。
  • 你是否有過疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?
    引言我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • Binary_Cross_Entropy
    一、Introduction訓練一個二元分類器( binary classifier)的時候,往往會用到binary cross-entropy
  • Softmax函數與交叉熵
    = -tf.reduce_sum(label * tf.log(y))cross_entropy = -tf.reduce_sum(label * tf.log(y))是交叉熵的實現。先對所有的輸出用softmax進行轉換為概率值,再套用交叉熵的公式。
  • TensorFlow四種Cross Entropy算法實現和應用
    ➤交叉熵介紹交叉熵(Cross Entropy)是Loss函數的一種(也稱為損失函數或代價函數),用於描述模型預測值與真實值的差距大小,常見的Loss函數就是均方平方差(Mean Squared Error),定義如下。
  • TensorFlow四種Cross Entropy算法的實現和應用
    平方差可以表達預測值與真實值的差異,但在分類問題種效果並不如交叉熵好,原因可以參考James D.TensorFlow的交叉熵函數TensorFlow針對分類問題,實現了四個交叉熵函數,分別是詳細內容請參考API文檔 https://www.tensorflow.org/versions/master/api_docs/python/nn.html#sparse_softmax_cross_entropy_with_logits
  • 【小知識】Softmax函數與交叉熵
    = -tf.reduce_sum(label * tf.log(y))cross_entropy = -tf.reduce_sum(label * tf.log(y))是交叉熵的實現。先對所有的輸出用softmax進行轉換為概率值,再套用交叉熵的公式。
  • 簡單的交叉熵,你真的懂了嗎?
    引言        我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 交叉熵(Cross Entropy)從原理到代碼解讀
    原理部分:要想搞懂交叉熵需要先清楚一些概念,順序如下:==1.自信息量—>2.信息熵(熵)—>3.相對熵(KL散度)—>4.交叉熵==1.自信息量隨機事件交叉熵=信息熵+相對熵為什麼這麼定義呢,先看相對熵,我們對相對熵計算公式展開得:可以看出相對熵展開後的第一項正好是信息熵的負值。
  • 完美解釋交叉熵
    通過幾個簡單的例子來解釋和總結什麼是交叉熵( Cross Entropy) 以及機器學習分類問題中為什麼使用交叉熵。其中一個最好的設計問題的策略如下:每一個硬幣有1/4的概率被選中, 1/4(機率) * 2道題目 * 4顆球 = 2,平均需要問兩道題目才能找出不同顏色的球,也就是說期望值為2,就是熵(entropy)。
  • 可視化理解 Binary Cross-Entropy
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?問題是,鑑於如今庫和框架的易用性,很容易讓人忽略所使用損失函數的真正含義。動機我一直在尋找一個可以向學生展示的以清晰簡潔可視化的方式解釋二值交叉熵/對數損失背後概念的博客文章。
  • 為什麼交叉熵(cross-entropy)可以用於計算代價?
    在不同領域熵有不同的解釋,比如熱力學的定義和資訊理論也不大相同。要想明白交叉熵(Cross Entropy)的意義,可以從熵(Entropy) -> KL散度(Kullback-Leibler Divergence) -> 交叉熵這個順序入手。當然,也有多種解釋方法[1]。
  • 熵方法在組合中的應用——用entropy證明Chang's lemma
    暑期學校中,劉老師為我們帶來不少利用熵方法求解組合問題的例子。其證明通常分為兩步:先將問題轉化成熵的語言,再利用熵的次可加性或Shearer's Lemma來給出我們想要的估計。本文是用另一個使用了熵方法的例子,R. Impagliazzo, C. Moore 和 A.
  • 透徹講解~交叉熵代價函數
    交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。在介紹交叉熵代價函數之前,本文先簡要介紹二次代價函數,以及其存在的不足。
  • 可視化理解二值交叉熵/對數損失
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?對於像我們的示例這樣的二分類,典型的損失函數是binary cross-entropy / log。
  • 機器學習小知識: 圖解熵、交叉熵和 KL-散度
    交叉熵是分類問題中最常用的損失函數之一。但是由於如今有大量容易上手的現成庫和框架,我們大多數人常常在沒有真正了解熵的核心概念的情況下,就可以熟練地解決問題。在本文中,讓我們研究一下熵這個概念背後的基本直覺,並將其與交叉熵、KL-散度相關聯。我們還將使用交叉熵作為損失函數,結合一個實例來看看它在分類問題中的應用。1什麼是熵?
  • Yolo v3中關於交叉熵與均方差損失函數的思考
    損失函數(誤差函數)是關於模型輸出和樣本標籤值之差的函數,通過對誤差函數求導來調節權重參數。
  • Pytorch 中交叉熵 Loss 趣解
    背景最近一直在總結Pytorch中Loss的各種用法,交叉熵是深度學習中最常用的計算方法,寫這個稿子把交叉熵的來龍去脈做一個總結。KL散度與交叉熵理解了信息量和信息熵之後,接下來就是交叉熵的概念了。介紹交叉熵之前,Loss是繞不開的。
  • 什麼是交叉熵啊?| 小白深度學習入門
    大家在學習深度學習的過程中,都會碰到cross-entropy這個詞,中文叫「交叉熵」,多麼高大上的名詞!
  • 小孩都看得懂的熵、交叉熵和 KL 散度
    主題:物理概念的熵熵(entropy)是物理中的一個概念。如下圖,水有三種狀態:固態、液態和氣態,分別以冰、水和水蒸氣的形式存在。反過來,如果用威少編碼來發送哈登動作分布的信息,得到信息平均編碼長度就也叫做交叉熵。正規定義:使用專門為另一個分布製作的密碼錶來發送某個分布中事件的信息,此時信息的平均編碼長度定義為交叉熵(cross-entropy)。