## 4 MODECP Approach
### Controller Placement Module  
The purpose of the controller placement module is to select a certain number of switch nodes from all switches to deploy control nodes so that these nodes contain both control and forwarding functions. After that, the remaining switches are reasonably allocated to controllers located at different positions so that the network can operate normally with lower delay, higher security, more balanced load, and lower link overhead. The controller placement approach comprehensively considers factors such as network delay, node security, controller load balance, and link cost, and it searches for the approximate optimal candidate switch to place the controller. According to the different requirements of network operators, based on the formulation of the problem in Section 3, the controller placement can be transformed from a single-objective optimization problem to a multi-objective optimization problem. However, due to different optimization objectives, there is regularly mutual restriction. That is, when one objective is optimized, other objectives will not obtain the optimal result to a large extent. Therefore, there is regularly a Pareto-optimal solution set for multi-objective optimization problems. In this section, we solve the controller placement problem by normalizing the different objectives. We propose a heuristic-based improved multi-objective differential evolution algorithm to obtain an approximate Pareto-optimal solution set. Its main parts include: (1) Population initialization. (2) Population mutation. (3) Population crossover. (4) Fitness evaluation. (5) Optimal population selection. In the improved multi-objective differential evolution algorithm, we believe that the position of the node where the controller is located and the ownership of the switch and controller are the main factors that constitute the chromosome. We obtain the main parameters of the construction algorithm from the input network topology information. The length of the chromosome is considered to be the total number of switches without controllers. The fitness function considers the factors of network delay, node security, controller load rate, and link overhead. A fitness evaluation function is constructed based on the model in Section 3 to select the optimal population according to the latitude and longitude geographic location, node connectivity, link betweenness centrality, and other characteristics. In addition, this approach also should set factors such as population size, mutation factor, and crossover factor. Additionally, the encoding method is natural number encoding. The normal operation of this algorithm is terminated by setting iteration times. Firstly, a reasonable population initialization is performed. After setting the population number, the value of the chromosome is determined according to the decision space, while the number \(k\) is randomly selected as the controller location in the decision space. The range of the decision space is \([0,N-1]\). The initialization of the population is the process of initializing both the controller position and the ownership of the switch and controller. The initialization occurred under the conditions of controller capacity constraint, switch-controller ownership constraint, and random initial population. The population initialization pseudocode is described in Algorithm 2. Secondly, the difference operation is performed on the newly generated population. That is, two different vectors in the population are used to interfere with an existing vector so as to achieve mutation. We randomly select three distinct offspring vectors from the population to mutate based on a given mutation factor according to the formula \(V_{i}^{S}=P_{r1}^{S}+F\cdot(P_{r2}^{S}-P_{r3}^{S});i=1,2,\ldots,np\). In the mutation process, in order to ensure the validity of the selected controller, it is necessary to judge whether the controller assigned to each switch exists in the set of candidate controller positions previously selected in the mutant individual.