Sebagai bagian dari proyek penelitian, saya mengoptimalkan fungsi yang ditentukan pengguna yang saya tahu (secara numerik dan analitis) berperilaku baik (quasi-cekung) dan saya mencoba menggunakan fmincon untuk menemukan optima tertentu.

Jika saya menentukan ('Tampilan', 'mati') sebagai opsi, fmincon berjalan, keluar secara normal dan memberi saya solusi yang SALAH. Jika saya menentukan ('Tampilan', 'aktif') sebagai opsi, fmincon melempar pengecualian dan berhenti. Dengan menggunakan parameter yang sama dan fungsi yang sama, seseorang dapat secara manual memeriksa bahwa solusi optimal adalah ~2.4.

clear all
%Model Parameters
global r e nDay nNight muH muL sigH sigL DH DL pH pL g cS cG bH BH IntBH bL BL IntBL QLim batSeq genSeq 
r = 0.3;
nDay = 14;
nNight = 24- nDay;
muH = nDay * r;
muL = nNight * r;
sigH = sqrt(nDay * r * (1-r));
sigL = sqrt(nNight * r * (1-r));
QLim = fix(((DH+DL)/r - DH)/1000)*1000;
g = 50;
cG = 11.1;
pH = 37;
pL = 23;
DH = 65000;
DL = 35000;
genSeq = 80000 
e = 0.9; %0.9 for battery %0.45 for Kraftblock
cS = 30; %60 for Battery %9 for Kraftblock

%Create integrals of specific normal cdfs (helper functions)
bH = @(x) exp(-((x-muH).^2)/(2*sigH.^2)) / (sigH*sqrt(2*pi));
BH = @(y) integral(@(x) bH(x), 0, y);
IntBH = @(z) integral(@(y) BH(y), 0, z, 'ArrayValued',true);
bL = @(x) exp(-((x-muL).^2)/(2*sigL.^2)) / (sigL*sqrt(2*pi));
BL = @(y) integral(@(x) bL(x), 0, y);
IntBL = @(z) integral(@(y) BL(y), 0, z, 'ArrayValued',true);

Pengoptimalan dimulai di sini (pada dasarnya kuadratkan turunannya dan temukan minimum (yaitu 0) dari itu)

counter = 0;
fval = [];
exitflag = [];
output = [];
for i = genSeq
    counter = counter + 1;
    fixed_Q = i
    jt3PartialKFixQ = @(K) jt3PartialK(fixed_Q, K)^2;
    try
        options = optimoptions('fmincon','Display','off');
        [x,fval,exitflag,output] = fmincon(jt3PartialKFixQ, 0, [], [], [], [] ,0, 14, [], options)
        jt3FixQRes(counter,:) = [x, i];
        disp(x)
    catch
        disp([i,"None Found"])
    end
end

%The function to be optimized
function profit = jt3PartialK(Q,K)
global r e nDay nNight muH muL sighH sigL DH DL pH pL g cS cG bH BH IntBH bL BL IntBL QLim
    V = min((Q-DL)/(Q-DH),100);
    profit = g*e*(1-BH(K*V)) - ...
        (g*e*sqrt(r))/((DL+DH)/r - DH) * (Q-DH)* (1-BH(K*V)) + ...
        g*e*(1-BL(K)) -...
        (g*e*sqrt(r))/((DL+DH)/r - DH) * (Q-DH)* (1-BL(K)) - ...
        cS;
end

Mengapa fungsi tampilan berpengaruh pada hasil optimasi? Bantuan apa pun untuk mencari cara menyelesaikan ini dengan benar (untuk sebagian besar kombinasi parameter itu hanya berjalan dan dioptimalkan seperti yang diharapkan) akan sangat dihargai.

0
seulberg1 13 Agustus 2019, 21:17

1 menjawab

Jawaban Terbaik

Anda mendapatkan kesalahan karena on bukan input yang valid untuk opsi Display. Untuk semua opsi yang valid nilai yang dioptimalkan yang saya temukan adalah 1,4190, yang tampaknya merupakan nilai yang benar. masukkan deskripsi gambar di sini

ViG 15 Agustus 2019, 10:49