## 3 Optimization Problems in Vehicular Networks  
### Ridesharing  
Ridesharing in public/private vehicles is an intriguing problem that has piqued the interest of numerous researchers. The taxonomy, shown in Figure 4, divides the literature discussed in this section into four categories: operation modes, problem type, methods used to solve the problem, and type of vehicle communication/protocol used. There are two types of ridesharing: static and dynamic. Static ridesharing assumes that driver and rider requests are known before executing a matching process, attempting to cover a wide variety of types such as dial-a-ride problems (DARP), carpooling, and slugging. Due to the complexity of ridesharing optimization, researchers use or adopt various heuristics, as well as mixed-integer/integer linear programming models, to solve large-sized instances [7]. Dynamic ridesharing is a service that  
Figure 4: Operation of RideSharing. hoc shared rides, made possible by low-cost geo-locating devices, smartphones, wireless networks, and social networks [65]. The dynamic ridesharing problem focuses on the fact that passenger requests are generated in real time. In this regard, [PERSON] et al. [66] proposed a branch-and-bound algorithm to solve the problem of ridesharing with service guarantees on road networks; moreover, they proposed a kinetic tree algorithm to better schedule dynamic requests and adjust routes on the fly. Their flexible algorithm could also handle changing road network layouts and traffic conditions. It creates a server trip schedule based on the server's location upon request, calculating trip cost between any two points on the schedule, and satisfying point order, waiting time, and service constraints. Furthermore, they build an augmented valid trip schedule that combines new requests with existing ones to share a partial trip among customers. Using their proposed kinetic tree approach, they allow constraint flexibility if pickup and drop-off locations are close to each other. Based on dual social group architecture (SGA), [PERSON] et al. [67] proposed a distributed ridesharing service that divides messages into driver social group architecture (DSGA) messages which include a driver's destination, and vehicle social group architecture (VSGA) messages that provide information on traffic condition. Assigning a number of token vehicles to each vehicle, tokens in the beacon packet were transmitted to the relay vehicles' neighbors by the relay vehicles. Neighbor vehicles will first collect the feature-level atomic messages with a one-hop communication scope and then fuse them using a fuzzy cluster method to generate the feature-level result. Each relay vehicle receives this message from the token vehicle and generates its own VSGA messages; this methodology allows to determine traffic conditions in double vehicle communication distance. Through this dual-SGA methodology, passenger wait times are significantly reduced. [PERSON] et al. [68] proposed four different ridesharing system models based on the pickup and drop-off locations of potential riders. They also proposed a dynamic algorithm for models in which the pickup and drop-off locations are different for all users. With DBSCAN clustering, they simulated the scenario of multiple ridesharing requests from the same or nearby regions. Grouping together requests and calculating the distance between two locations using the Haversine formula and the Google Maps Direction API, they divide the cost for passengers with shared ride distance evenly. They assessed the algorithm using ridesharing metrics such as satisfying requests and waiting time per passenger. Additionally, they implemented a taxi distance minimization algorithm with a complexity of \(O(n\times m)\) where \(n\) and \(m\) are pickup and drop-off events, finding that their proposed algorithm accommodates higher ridesharing among passengers. [PERSON] et al. [69] concentrated on the automatic matching process, which is one of the most difficult challenges in dynamic ridesharing.