2016-03-24 14 views
0

Ev kullanımı için Matlab Home + Optimization modülünü satın almayı düşünüyorum, ancak istediğimi yapabileceğinden emin değilim.Can Matlab harici bir işlemi optimize eder mi?

Girdi alan, bir işlem yürüten ve çıktı üreten harici bir işlem (Matlab değil) var. Matlab'a girdi ve çıktıyı bağlamak istiyorum, böylece Matlab bu girişleri, "ayrık" sürecin kendisi için tamamen körleştirebilir. Matlab'ın farklı optimizasyon yetenekleri var mı, yoksa tüm optimizasyon işlevleri sürecin kendisinin içsel erişimine sahip mi?

Teşekkürler! Harici süreç parametrelerini asimile ve herhangi örneğin yöntemleri, komut satırını veya dosyaları kullanarak harici bir program yanıt vermek yeteneğinin olup olmadığını

-Stephen

cevap

3

, evet sadece göndermek ve okumak için objektif fonksiyonu mümkün yapılandırmak edilir Dış işleme parametreler ve cevap verileri.

Ayrık optimizasyon için, en iyi duruma getirme araç kutusu ayrık en iyi duruma getirme sorunları ile çalışmaz, ancak belgeler, parametrenin hedef işlev içinde yuvarlanması ve ardından yanıt değişkeninde tekrar çalıştırılması hakkında bir ipucu verir.

:

örneğin, bu piton yazılan bir dış program kodlu bir prizma bir hacme optimize etmek için bir fonksiyonu (sadece tek bir objetive genetik algoritma ile gösteri amacıyla (ga)) olabilir

function f = optim(x) 
    %Optimization criteria 
    l = round(x(1)); 
    h = round(x(2)); 
    w = round(x(3)); 

    %String to produce the external proccess call as a system command   
    commandStr = ['python -c "print ' num2str(l) ' * ' num2str(h) ' * ' num2str(w) ' "']; 

    %Execute the system command, status = 0 for good execution 
    [status, commandOut] = system(commandStr); 

    %Convert the output of the external program from strin to doble and assign as the response of the optimization funcition 
    f = str2double(commandOut) 

Sonra bu görevi görüyordu kullanarak optimtool kullanabilirsiniz objetive olarak: Sonra

enter image description here

ex sonucu çalışma alanına ve round() numaralı bağlantı noktasına getirin.

Yoksa böyle bir kod ile programlanabilir olun:

function [x,fval] = runOptimization(lb,ub) 
    options = gaoptimset; 
    options = gaoptimset(options,'Display', 'off'); 
    [x,fval] =ga(@optim,3,[],[],[],[],lb,ub,[],[],options); 
    x = round(x) 
    fval = optim(x) 

Ve

[x,fval] = runOptimization([1 1 1],[3 4 5]) 

olarak NOT çalıştırın. round(), yalnızca

belgelerinde önerilen şekilde ayrı optimizasyonun nasıl yapıldığını göstermek için işlev görür.
İlgili konular