Error: Complex values are not supported
Mostrar comentarios más antiguos
Hi. I'm trying to perform a multiobjective optimization together with aspen plus. I'm using the optimization toolbox (gamultiobj). But after hours, I found the following error: "Complex values are not supported". How should I proceed?
function [TAC] = Objective(x)
global Aspen
Aspen = actxserver('Apwn.Document.36.0');
[~,mess]=fileattrib;
Aspen.invoke('InitFromArchive2',[mess.Name '\SimulationACRYL2.bkp']);
Aspen.Visible = 1;
Aspen.SuppressDialogs = 1;
Aspen.Engine.Run2(1);
while Aspen.Engine.IsRunning == 1
pause(0.5);
end
Stages = round(x(1) + 2);
Pressure = x(2);
Feed_Stage = round((Stages-2)*x(3) + 1);
Aspen.Tree.FindNode("\Data\Blocks\B2\Input\NSTAGE").Value = Stages;
Aspen.Tree.FindNode("\Data\Blocks\B2\Subobjects\Column Internals\INT-1\Input\CA_STAGE2\INT-1\CS-1").Value = Stages - 1;
Aspen.Tree.FindNode("\Data\Blocks\B2\Input\PRES1").Value = Pressure;
Aspen.Tree.FindNode("\Data\Blocks\B2\Input\FEED_STAGE\S50").Value = Feed_Stage;
Aspen.Reinit; % Reinit simulation
Aspen.Engine.Run2(1); %Run the simulation. (1) ---> Matlab isnt busy; (0) Matlab is Busy;
time = 1;
Error = 0;
while Aspen.Engine.IsRunning == 1 % 1 --> If Aspen is running; 0 ---> If Aspen stop.
pause(0.5);
time = time+1;
if time==40 % Control of simulation time.
Aspen.Engine.Stop;
Error = 1;
end
end
Conv = Aspen.Tree.FindNode("\Data\Results Summary\Run-Status\Output\PER_ERROR").Value;
if Error == 0 && Conv == 1
% column cost
Lang_F = 4.74;
Diameter = Aspen.Tree.FindNode("\Data\Blocks\B2\Subobjects\Column Internals\INT-1\Input\CA_DIAM\INT-1\CS-1").Value;
Number_trays = double(Aspen.Tree.FindNode("\Data\Blocks\B2\Input\NSTAGE").Value - 2);
height_Column = 0.5*(Number_trays)+2;
heat_reboiler = (Aspen.Tree.FindNode("\Data\Blocks\B2\Output\REB_DUTY").Value)*4.1868;
Presure_project = 441.3;
Tension = 108000;
Column_thickness = ((Presure_project*Diameter)/((2*Tension*0.85)-(1.2*Presure_project))) + 0.003;
Density_carbon_steel = 7861.1;
Column_side_volume = 3.14*Column_thickness*height_Column*Diameter;
Column_side_mass = (Column_side_volume*Density_carbon_steel)*2.205;
External_radius = (Diameter + 2*Column_thickness)/2;
Cover_volume = 4*3.14*(External_radius^2)*Column_thickness*2;
Cover_mass = (Cover_volume*Density_carbon_steel)*2.205;
total_mass = Column_side_mass + Cover_mass;
Cv = exp((7.2756 + 0.18255*(log(total_mass))) + (0.02297*((log(total_mass))^2)));
Diameterft = Diameter*3.281;
height_Columnft = height_Column*3.281;
Cpl = 300.9*((Diameterft)^0.63316)*(height_Columnft^0.80161);
Factor_material_column = 1;
FNT = 1;
FTT = 1;
FTM = 1;
CBT = 468*exp(0.1739*Diameterft);
CT = CBT*FTM*FTT*FNT*Number_trays;
CP = Factor_material_column*Cv + Cpl;
Cost_column = CP + CT;
% condenser cost
Temp_out_fluid_cold = 20;
Temp_in_fluid_cold = 5;
Temp_in_fluid_hot = Aspen.Tree.FindNode("\Data\Streams\S4\Output\TEMP_OUT\MIXED").Value;
Temp_out_fluid_hot = Aspen.Tree.FindNode("\Data\Streams\S4\Output\TEMP_OUT\MIXED").Value;
Temperature_exchange_termic = ((Temp_in_fluid_hot - Temp_out_fluid_cold) - (Temp_out_fluid_hot - Temp_in_fluid_cold))/log((Temp_in_fluid_hot - Temp_out_fluid_cold)/(Temp_out_fluid_hot - Temp_in_fluid_cold));
Factor_exchange_termic = 0.85;
coefficient_exchange_termic = 850;
Heat_condenser = (Aspen.Tree.FindNode("\Data\Blocks\B2\Output\COND_DUTY").Value)*4.1868;
Area_condenser = ((Heat_condenser)/(Temperature_exchange_termic*coefficient_exchange_termic*Factor_exchange_termic))*10.76;
Cost_condenser = exp(11.0545 - 0.9228*(log(Area_condenser)) + 0.09861*(log(Area_condenser)^2));
Pipe_length = 1;
Type_Material_Condenser = 1;
pressure_condenser = 1;
Condenser_total_cost = Cost_condenser*Pipe_length*Type_Material_Condenser*pressure_condenser;
%Reboiler cost
Temp_in_fluid_hot_reboiler = 127.5;
Temp_out_fluid_hot_reboiler = 127.5;
Temp_out_fluid_cold_reboiler = Aspen.Tree.FindNode("\Data\Streams\12\Output\TEMP_OUT\MIXED").Value;
Temp_in_fluid_cold_reboiler = Aspen.Tree.FindNode("\Data\Streams\12\Output\TEMP_OUT\MIXED").Value;
Temperature_exchange_termic_reboiler = ((Temp_in_fluid_hot_reboiler - Temp_out_fluid_cold_reboiler) - (Temp_out_fluid_hot_reboiler - Temp_in_fluid_cold_reboiler))/log((Temp_in_fluid_hot_reboiler - Temp_out_fluid_cold_reboiler)/(Temp_out_fluid_hot_reboiler - Temp_in_fluid_cold_reboiler));
Factor_exchange_termic_reboiler = 0.85;
coefficient_exchange_termic_reboiler = 1560;
Area_reboiler = ((heat_reboiler)/(Temperature_exchange_termic_reboiler*coefficient_exchange_termic_reboiler*Factor_exchange_termic_reboiler))*10.76;
Cost_reboiler = exp(11.967 - 0.8709*(log(Area_reboiler)) + 0.09005*(log(Area_reboiler)^2));
Pipe_length_reboiler = 1;
Type_Material_reboiler = 1;
pressure_reboiler = 1;
Reboiler_total_cost = Cost_reboiler*Pipe_length_reboiler*Type_Material_reboiler*pressure_reboiler;
% cost of utilities
Chilled_water_cost = ((Aspen.Tree.FindNode("\Data\Blocks\B2\Output\COND_DUTY").Value)*4.1868)*31536000*0.0000000009258;
Steam_Cost = ((Aspen.Tree.FindNode("\Data\Blocks\B2\Output\REB_DUTY").Value)*4.1868)*0.000000004607*31536000;
TAC(1) = (Cost_column + Condenser_total_cost + Reboiler_total_cost)*Lang_F*1.14*1.1906/10;
TAC(2) = Steam_Cost + Chilled_water_cost;
else
TAC(1) = inf;
TAC(2) = inf;
end
Aspen.Quit();
end
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre Mathematics en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!