Optimization Algorithms - Mathematical Formulations
1. OR-Tools CP-SAT (Constraint Programming)
Decision Variables:
xiββ{0,1,2}βiβT
where $T$ is the set of trainsets, and:
- $x_i = 0$: trainset $i$ assigned to service
- $x_i = 1$: trainset $i$ assigned to standby
- $x_i = 2$: trainset $i$ assigned to maintenance
Constraints:
iβTββ1xiβ=0β=Nserviceβ
iβTββ1xiβ=1ββ₯Nstandbyminβ
iβTββ1xiβ=0ββ€Cservicemaxβ
Objective Function:
maxZ=wrβiβTββriββ
1xiβ=0β+wbββ
Bβwvββ
V
where:
- $r_i$: readiness score of trainset $i$
- $B$: balance score
- $V$: total violations
- $w_r, w_b, w_v$: weights
2. Mixed Integer Programming (MIP)
Decision Variables:
yi,sββ{0,1}βiβT,sβS
where $S = {0, 1, 2}$ (service, standby, maintenance)
Constraints:
sβSββyi,sβ=1βiβT
iβTββyi,0β=Nserviceβ
iβTββyi,1ββ₯Nstandbyminβ
Objective Function:
maxZ=iβTββsβSββci,sββ
yi,sβ
where $c_{i,s}$ is the cost coefficient for assigning trainset $i$ to state $s$.
3. Genetic Algorithm (GA)
Chromosome Representation:
x=[x1β,x2β,β¦,xnβ]xiββ{0,1,2}
Fitness Function (to minimize):
f(x)=βwrβi:xiβ=0ββriββwbββ
1+Οm2β1β+wvββ
P(x)
Equivalently (to maximize):
fβ²(x)=wrβi:xiβ=0ββriβ+wbββ
1+Οm2β1ββwvββ
P(x)
where:
- $\sigma_m^2$: mileage variance
- $P(\mathbf{x})$: penalty for constraint violations
- Note: Code uses minimization (negative fitness)
Selection (Tournament):
P(select xiβ)=11f(xiβ)=maxjβKβf(xjβ)ββ
where $K$ is a random tournament subset of size $k$.
Two-Point Crossover:
c1β=[p1β[1:p],p2β[p:q],p1β[q:n]]
c2β=[p2β[1:p],p1β[p:q],p2β[q:n]]
where $p, q$ are random crossover points, $\mathbf{p}_1, \mathbf{p}_2$ are parents.
Mutation:
xiβ²β={random({0,1,2})xiββwith probability pmβotherwiseβ
4. CMA-ES (Covariance Matrix Adaptation Evolution Strategy)
Sampling Distribution:
xkββΌN(m,Ο2C)
where:
- $\mathbf{m}$: mean vector
- $\sigma$: step size
- $\mathbf{C}$: covariance matrix
Mean Update:
m(g+1)=m(g)+Ο(g)ywβ
where $\mathbf{y}w = \sum{i=1}^{\mu} w_i \mathbf{y}_{i:\lambda}$ is weighted recombination.
Step Size Update:
Ο(g+1)=Ο(g)exp(dΟβcΟββ(Eβ₯N(0,I)β₯β₯pΟ(g+1)ββ₯ββ1))
Covariance Matrix Update:
C(g+1)=(1βc1ββcΞΌβ)C(g)+c1βpcβpcTβ+cΞΌβi=1βΞΌβwiβyi:Ξ»βyi:Ξ»Tβ
5. Particle Swarm Optimization (PSO)
Position and Velocity:
xiβ(t)βRn,viβ(t)βRn
Velocity Update:
viβ(t+1)=wviβ(t)+c1βr1β(piββxiβ(t))+c2βr2β(gβxiβ(t))
where:
- $w$: inertia weight
- $c_1, c_2$: cognitive and social coefficients
- $r_1, r_2 \sim U(0,1)$: random numbers
- $\mathbf{p}_i$: personal best position
- $\mathbf{g}$: global best position
Position Update:
xiβ(t+1)=xiβ(t)+viβ(t+1)
Velocity Clamping (optional but recommended):
viβ(t+1)=clip(viβ(t+1),βvmaxβ,vmaxβ)
Discrete Conversion:
xiβ=β©β¨β§β012βif sigmoid(x~iβ)>threshold0βif sigmoid(x~iβ)>threshold1βotherwiseβ
6. Simulated Annealing (SA)
Energy Function:
E(x)=βf(x)
where $f(\mathbf{x})$ is the fitness function to maximize.
Acceptance Probability:
P(accept)={1exp(βTΞEβ)βif ΞEβ€0if ΞE>0β
where:
- $\Delta E = E(\mathbf{x}{\text{new}}) - E(\mathbf{x}{\text{current}})$
- $T$: current temperature
Cooling Schedule (Geometric):
Tk+1β=Ξ±β
Tkβwhere 0<Ξ±<1
Perturbation Operator:
xβ²=swap(x,i,j)where i,jβΌU{1,n}
7. Multi-Objective Optimization (NSGA-II)
Objective Vector:
F(x)=[f1β(x),f2β(x),β¦,fkβ(x)]T
where:
- $f_1$: maximize readiness
- $f_2$: minimize mileage variance
- $f_3$: maximize branding
- $f_4$: minimize violations
Pareto Dominance:
x1ββΊx2ββΊ{βi:fiβ(x1β)β₯fiβ(x2β)βj:fjβ(x1β)>fjβ(x2β)β
Crowding Distance:
diβ=m=1βkβfmmaxββfmminβfmi+1ββfmiβ1ββ
Selection Operator:
x1ββ»x2ββΊ{rank(x1β)<rank(x2β)rank(x1β)=rank(x2β)β§d1β>d2ββor
8. Ensemble Optimization
Weighted Combination:
xβ=argxβ{x1β,β¦,xmβ}maxβf(x)
where $\mathbf{x}_j$ is the solution from algorithm $j$.
Consensus Voting:
xiββ=mode{xi(1)β,xi(2)β,β¦,xi(m)β}
Weighted Average (for continuous):
x~iβ=j=1βmβwjββ
xi(j)βwhere j=1βmβwjβ=1
Common Constraint Penalty Function
P(x)=Ξ±1βmax(0,Nserviceββnsβ)2+Ξ±2βmax(0,Nstandbyminββnsbβ)2+Ξ±3βiβTββviβ
where:
- $n_s = \sum_i \mathbb{1}_{x_i = 0}$: actual service count
- $n_{sb} = \sum_i \mathbb{1}_{x_i = 1}$: actual standby count
- $v_i$: trainset-specific violations (e.g., maintenance requirements)
- $\alpha_1, \alpha_2, \alpha_3$: penalty coefficients
Balance Score (Mileage Variance Minimization)
Implementation formula (used in code):
B=100βmin(1000Οmββ,100)
Theoretical normalized formula:
Bnormβ=1βΟmmaxβΟmββ
where:
Οmβ=β£Sβ£1βiβSββ(miββmΛ)2β
- $S = {i : x_i = 0}$: trainsets in service
- $m_i$: mileage of trainset $i$ (in km)
- $\bar{m} = \frac{1}{|S|}\sum_{i \in S} m_i$: mean mileage
- Factor 1000 in implementation scales std dev to reasonable range