이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。
이예제에서는fgoalattain
을사용하여2차원다중목적함수에대한파레토경계를생성하고플로팅하는방법을보여줍니다。
이예제에나와있는두개의목적함수는볼록함수
을이동하여크기를조정한것입니다。목적함수코드는이예제의마지막부분에있는simple_mult
헬퍼함수에나와있습니다。
두목적함수모두영역 에서감소하고영역 에서증가합니다。1 0과사이에서 는증가하고 는감소하므로상충영역이생깁니다。 ~ 범위의 에대해두목적함수를플로팅합니다。
t = linspace (1/2, 3/2);F = simple_mult (t);情节(t、F“线宽”, 2)在情节([0,0],[0,8],“g——”);情节([1],[0,8],“g——”);情节([0,1],(1,6),“k”。,“MarkerSize”15);文本(-0.25,1.5,“最小f (f (x))”5.5)文本(综合成绩,“最低(₂(x))”)举行从传奇(' f (x)的,“₂(x)”)包含({“x”;“绿线之间的权衡区域”})
파레토경계를구하려면먼저두목적함수의제약조건없는최솟값을구해야합니다。이경우에는 의최솟값이1이고 의최솟값이6이라는사실을플롯에서확인할수있지만,일반적으로는최적화루틴을사용해야최솟값을구할수있습니다。
일반적으로,다중목적함수의특정성분을반환하는함수를작성합니다。(이예제의마지막부분에있는pickindex
헬퍼함수가
번째목적함수값을반환합니다。)그런다음최적화솔버를사용하여각성분의최솟값을구합니다。이경우에는fminbnd
를사용하면되며,차원이더높은문제에대해서는fminunc
를사용하면됩니다。
k = 1;[min1, minfn1] = fminbnd (@ (x) pickindex (x, k), 1, 2);k = 2;[min2, minfn2] = fminbnd (@ (x) pickindex (x, k), 1, 2);
각목적함수에대해제약조건이없는최적값을목표로설정합니다。목적함수가서로방해가되지않는경우,즉상충이없는경우에만이러한목표를동시에달성할수있습니다。
目标= [minfn1, minfn2];
파레토경계를계산하기위해0에서1사이의 에대해가중벡터 를사용합니다。가중치를다양한값으로설정하여목표달성문제를풉니다。
nf = 2;%目标函数个数N = 50;%绘制的点数onen = 1 / N;x = 0 (N + 1);f = 0 (N + 1 nf);有趣= @simple_mult;x0 = 0.5;选择= optimoptions (“fgoalattain”,“显示”,“关闭”);为r = 0:N t = onen*r;% 0到1重量= (t - t);[x (r + 1:), f (r + 1:)] = fgoalattain(有趣,x0,目标,重量,...[],[],[],[],[],[],[], 选项);结束图绘制(f (: 1), f (:, 2),“柯”);包含(“f”) ylabel (“₂”)
두목적함수사이에상충이있는지를확인할수있습니다。
다음코드는simple_multi
함수를생성합니다。
函数F(:,1) =√(1+x.^2);F(:,2) = 4 + 2*根号1+(x-1) ^2;结束
다음코드는pickindex
함수를생성합니다。
函数Z = pickindex(x,k) Z = simple_mult(x);同时评估两个目标z = z (k);回报率目标结束