# A Distributed Autonomous Mission Planning Method for the Low-Orbit Imaging Constellation
## 4 c-Cbba
### Task Preemption Strategy
#### 4.1.2 Consensus Check  
In this phase, each agent updates its own knowledge about global information by interacting with neighboring agents, and then updates the task bundle accordingly. The consensus check phase under the TPS is as follows:  
Step 1: when satellite \(s_{i}\) receives the neighbor's message, it checks for consistency with its own message. If inconsistent, update the information. The basic CBBA needs to update the highest bid list \(y_{i}\), highest bid satellite list \(z_{i}\), and timestamp list \(h_{i}\). The update rules are shown in Table 5.  
There are three types of rules for updating information:  
* update: \(y_{ij}=y_{i^{\prime}j}\), \(z_{ij}=z_{i^{\prime}j}\);
* reset: \(y_{ij}=0\), \(z_{ij}=\) none;
* leave: \(y_{ij}=y_{ij}\), \(z_{ij}=z_{ij}\). The timestamp list \(h_{i}\) is updated in such a way: when the satellite \(s_{i}\) communicates with \(s_{ir}\), the timestamp \(h_{ii^{\prime}}\) is updated to the moment \(t\) of this communication, and the timestamp \(h_{ii^{\prime\prime}}\), in which satellite \(s_{i}\) obtains information about the other satellites \(s_{i^{\prime\prime}}\), is updated to the larger of \(h_{ii^{\prime\prime}}\) and \(h_{i^{\prime}i^{\prime\prime}}\). The timestamp update formula is shown in Equation (10) and (11)  
\[h_{ii^{\prime}}=t, \tag{10}\]  
\[h_{ii^{\prime\prime}}=\max\{h_{ii^{\prime\prime}},\ h_{i^{\prime}i^{\prime \prime}}\},\ \forall i^{\prime\prime}\in T\backslash\{i,i^{\prime}\}. \tag{11}\]  
The c-CBBA with TPS also needs to update the list of task preemption markers \(u_{i}\) and preemptive timestamp \(v_{i}\). Table 6 lists the update rules for c-CBBA, which are modified based on Table 5.  
The update rules for auction information are as follows:  
* update: \(y_{ij}=y_{j^{\prime}j}\), \(z_{ij}=z_{i^{\prime}j}\), \(u_{ij}=u_{ij^{\prime}j}\), \(v_{ij}=v_{j^{\prime}j}\);
* leave: \(y_{ij}=y_{ij}\), \(z_{ij}=z_{ij}\), \(u_{ij}=u_{ij}\), \(v_{ij}=v_{ij}\)  
Step 2: update \(q_{i}\). After communicating with a neighbor, if task \(t_{j}\) is not preempted and \(z_{ij}=i\), then the continuous communication count \(q_{ij}\) will be increased by 1; If \(z_{ij}\
eq i\), \(q_{ij}\) is set to 0. Step 3: task preemption. If task \(t_{j}\) is not preempted, determine whether the continuous communication count \(q_{ij}\) has reached \(\alpha\): if it has, the satellite \(s_{i}\) will preempt task \(t_{j}\). After preemption, update the preemption marker \(u_{ij}\) to 1, update the preemption timestamp \(v_{ij}\) to the current communication time, and advance task \(t_{j}\) to the first position of \(b_{i}\) (the purpose of the advance operation is to separate preempted tasks from non-preempted tasks, preventing preempted tasks from being discarded when the task bundle is updated at a later time). Step 4: update the task bundle. For preempted tasks, when the preemption fails because the preemption time is later than other satellites, they are to be removed directly from \(b_{i}\). For non preemptive tasks, adding each task during the construction of the task bundle will have an impact on subsequent task additions. Therefore, if the information is inconsistent after interacting with neighbors, a disintegration operation should be performed. Denote the position of the most forward task of \(z_{ij}\
eq i\) in \(b_{i}\) as \(\overline{n}\). Reset the \(y_{ij}\) and \(z_{ij}\) of the corresponding task after the \(\overline{n}\) position in \(b_{i}\). Decompose the task on position \(\overline{n}\) \begin{table}
\begin{tabular}{c c c} \hline \(s_{i^{\prime}}\) (Sender) Think \(z_{ij}\) Is & \(s_{i}\) (Receiver) Think \(z_{ij}\) Is & Receiver’s Action (Default: Leave) \\ \hline \multirow{4}{*}{0} & \multirow{4}{*}{0} & Update \(y_{ij}\) and \(z_{ij}\) according to \\  & & Table 5 \\ \cline{2-3}  & & 1 & leave \\ \hline \multirow{4}{*}{1} & \multirow{4}{*}{1} & 0 & update \\ \cline{2-3}  & & 1 & if \(v_{ij}>v_{ij}\rightarrow\) leave \\ \cline{2-3}  & & & else \(\rightarrow\) update \\ \hline \end{tabular}
\end{table}