0

MATLAB ga() 함수를 사용하여 최적화 문제를 해결하려고합니다.MATLAB ga()는 사용자가 제공 한 초기 모집단을 무시합니다.

가능한 한 간결하게하려고합니다. 그것은 기본적으로 최소 제곱 피팅 문제입니다. 여기서 대상 함수를 시도하고 일치시키기 위해 일부 입력을 조작합니다. 문제는 40 개의 변수가 있습니다. 제약 조건, 선형 등식, 선형 부등식 및 비선형 제약 조건이 있습니다.

전에 MATLAB이 초기 모집단을 선택하게했지만 그 결과는 좋지 않았습니다. 나는 이것이 MATLAB의 선택의 다양성의 결여 때문이라고 느꼈다. 그래서 비선형 제약을 제외한 모든 제약 조건을 만족하는 초기 모집단을 만드는 함수를 코딩했습니다 (이 값은 시뮬레이션 후 계산됩니다).

나는이 같은 주제와 관련된 MATLAB 중앙 교환국에서 인터넷 검색을 한 번만했고 2007 년부터 해결 된 적이 없었습니다.

다음은 문제가있는 코드 섹션입니다. 나는 그것이 매우 컸다는 것을 유감스럽게 생각하지만, 나는 그것이 논리적으로 아주 자세하게 배치되어 있다고 생각한다. 나는 GA (문제)를 사용하고 있으며이 코드의 대부분은 모든 제약 조건을 나열하는 것입니다. 제공 할 수

ineq_con_tau_LB = [zeros(1,nInjections) zeros(1,nInjections) tau_LB/60/1e6 tau_LB/60/1e6 tau_LB/60/1e6 0] 
ineq_con_tau_UB = [zeros(1,nInjections) zeros(1,nInjections) 0 0 -tau_UB/60/1e6 0] 
problem_structure.Aineq = [ineq_con_tau_LB; ineq_con_tau_UB]; 
problem_structure.bineq = [nInjections*CP.reactorVolume;-nInjections*CP.reactorVolume]; 


    eq_con_antisolvent = [ones(1,nInjections) zeros(1,nInjections) -1 0 0 0]; 
    eq_con_puresolvent = [zeros(1,nInjections) ones(1,nInjections) 0 -1 0 0]; 
    problem_structure.Aeq = [eq_con_antisolvent; eq_con_puresolvent]; 
    problem_structure.beq = [0 0]'; 

    %Upper and lower bounds. 
    Atotal_min = 10; Atotal_max = 1000; 
    Stotal_min = 10; Stotal_max = 1000; 
    Vfeed_min = 10; Vfeed_max = 1000; 
    ypercent_min = 0.02; 
    ypercent_max = 0.07; 

    problem_structure.lb = [  zeros(1,nInjections)  zeros(1,nInjections) Atotal_min Stotal_min Vfeed_min ypercent_min]; 
    problem_structure.ub = [repmat(inf,1,nInjections) repmat(inf,1,nInjections) Atotal_max Stotal_max Vfeed_max ypercent_max]; 


    problem_structure.nonlcon = @constr; 
    problem_structure.nvars = 2*nInjections + 4;  
    problem_structure.fitnessfcn = @objfun; 
    problem_structure.intcon = []; 
    populationsize = 5; 
    gapop = dissolution_optimization_initialpop(populationsize,nInjections,problem_structure.Aineq, ... 
                      problem_structure.bineq, ... 
                      problem_structure.lb(:), ... 
                      problem_structure.ub(:), ... 
                      tau_LB, ... 
                      tau_UB, ... 
                      ypercent_min, ... 
                      ypercent_max); 

    problem_structure.options = gaoptimset('Generations', 25,... 
           'PopulationSize',populationsize, ... 
           'InitialPopulation',gapop, ... 
           'OutputFcn', @sse_outputfcn, ... 
           'MutationFcn', {@mutationadaptfeasible}); 
    problem_structure.options 
    save('gapop_save','gapop') 
    [x,fval,exitflag,output] = ga(problem_structure) 

어떤 도움을 크게 감사합니다. 도와주세요! : (((

답변

1

) 이런 일이 발생하면 가장 먼저 할 일은 초기 인구가 경계, 선형 또는 동등한 제약 조건을 위반하지 않는지 확인하는 것입니다 .Matlab은 이러한 제약 조건을 만족시킨다.

앤드류를

0

당신의 도움에 감사드립니다.

사실은 자신이 얼마 전에이에게 고정, 당신이 올바른지 확인합니다. 초기 인구가 제약을 따르지 않았다.

또는 오히려, 그들은 MATLAB GA가 원했던 정밀도로 그들을 따르지 않았습니다. 제약 조건은 1e-15 이내로 만족되었습니다. 하지만 여전히 충분하지 않았으며 MATLAB은 동등성이 "0"으로 죽지 않는 한 해당 샘플을 거부했습니다.