We compute the Pareto front for a Continuous Stirred Tank Reactor (CSTR) using a multi-objective approach. Our goal is to find the optimal operating conditions by balancing reactor performance ( X=conversion of reactant) and operating cost. Two decision variables are considered: (1) reactor temperature (T in Kelvin) and residence time (tau in seconds). These variables strongly influence the reaction kinetics, conversion, and energy consumption.
​
The reaction rate follows the Arrhenius law
k=k0exp[-Ea/(RT)]
where T is the temperature, k0=
6
10
-1
s
is the pre-exponential factor, Ea=60000 J/mol is the activation energy and R=8.314 J/mol·K is the universal gas constant.
​
At steady-state, the outlet concentration in the CSTR is given by
CA=C0/(1+ktau)
where tau is the residence time. The conversion is given by
X=(C0-CA)/C0
where C0 is the feed concentration of the reactant entering the reactor.
​
We assume that the operating cost depends on both temperature and residence time: cost=
a*(T-T0)^2+b*tau
+c*(1-X) where a=0.001 represents the energy cost coefficient associated with heating, b=0.05 represents the reactor size / residence time cost coefficient, c=10 in order to penalyze small conversions and T0​=350 K is the reference feed temperature.
Two competing objectives are considered: (1) Maximize reactor conversion and (2) Minimize operating cost. Higher temperature and residence time increase the reaction rate and therefore improve conversion but result in higher costs. These objectives are conflicting and lead to a Pareto optimal trade-off.
​
The Pareto front represents the set of optimal solutions where improving one objective would worsen the other. Each point on the curve corresponds to a specific pair of operating conditions (T and tau). The Pareto front therefore helps identify the best compromise between reactor performance and operating cost.
​
Here, we find the following best compromise solution:
Temperature = 481.33 K
Residence time = 20.00 s
Conversion = 0.8603
Cost = 19.6438
Temperature cost coefficient
a=0.001;
Residence time cost coefficient
b=0.05;
Conversion penalty coefficient
c=10;
Reference temperature
T0=350;
reactor[{T_,tau_}]:=Module[{k0=1*^6,Ea=60000,R=8.314,C0=1.0,k,CA,X,cost},(*Arrheniuskinetics*)k=k0Exp[-Ea/(RT)];​​(*CSTRoutletconcentration*)CA=C0/(1+ktau);​​(*maximizeconversion-takeoppositeforminimization*)X=-Log[(C0-CA)/C0+0.001];​​(*Costfunctionwithconversionpenalty*)cost=a*(T-T0)^2+b*tau+c*(1-X);​​{X,cost}]
reactor1[{T_,tau_}]:=Module[{k0=1*^6,Ea=60000,R=8.314,C0=1.0,k,CA,X,cost},(*Arrheniuskinetics*)k=k0Exp[-Ea/(RT)];​​(*CSTRoutletconcentration*)CA=C0/(1+ktau);​​(*conversion0-1*)X=(C0-CA)/C0;​​(*Costfunctionwithconversionpenalty*)cost=a*(T-T0)^2+b*tau+c*(1-X);​​{X,cost}]
weightedObjective[{T_,tau_},w_]:=Module[{X,cost},{X,cost}=reactor[{T,tau}];​​w*(X)+(1-w)*cost]
w is a weighting factor, which is used in order to combine the cost and conversion functions into one scalar objective function so that FindMinimum can optimize it.
​
Objective function : w conversion + (1-w) cost
solutions=Table[FindMinimum[{weightedObjective[{T,tau},w],350<=T<=650,1<=tau<=20},{{T,400},{tau,5}}][[2]],{w,0,1,0.001}];​​(*350<=T<=650and1<=tau<=20variablebounds*)
Compute Pareto Points
pareto=Table[reactor1[{T,tau}/.solutions[[i]]],{i,1,Length[solutions]}];
Best Compromise Solution
Normalize objectives for distance calculation
A=1-pareto[[All,1]];(*conversion0-1*)​​B=pareto[[All,2]]/Max[pareto[[All,2]]];​​F=Transpose[{A,B}];​​distancesScaled=Norm/@F;
In[]:=
idxBest=First@Ordering[distancesScaled,1];
In[]:=
bestSolution=solutions[[idxBest]];​​bestPareto=pareto[[idxBest]];
In[]:=
Print["Best compromise solution:"];​​Print["Temperature = ",NumberForm[T/.bestSolution,{6,2}]," K"];​​Print["Residence time = ",NumberForm[tau/.bestSolution,{6,2}]," s"];​​Print["Conversion = ",NumberForm[bestPareto[[1]],{6,4}]];​​Print["Cost = ",NumberForm[bestPareto[[2]],{6,4}]];​​
Best compromise solution:
Temperature = 481.33 K
Residence time = 20.00 s
Conversion = 0.8603
Cost = 19.6438
Plot Pareto Front - Best compromise solution is indicated by blue dot - minimal distance indicated in green
ListPlotpareto,

Out[]=

CITE THIS NOTEBOOK

Multi-objective optimization of a CSTR reactor​
by Housam Binous​
Wolfram Community, STAFF PICKS, March 9, 2026
​https://community.wolfram.com/groups/-/m/t/3655721