Patent Publication Number: US-2023140268-A1

Title: Systems and methods for improving ridesharing

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of and priority to U.S. Provisional Patent Application No. 63/003,446, filed Apr. 1, 2020, the entire contents of which are owned by the assignee of the instant application and incorporated herein by reference in their entirety. 
    
    
     FIELD OF THE INVENTION 
     The invention relates generally to vehicle ridesharing and systems and methods for ridesharing management. 
     BACKGROUND OF THE INVENTION 
     Recent years have witnessed increasing interest and development in the field of vehicle sharing, where one or more riders may share the same vehicle for a portion of their rides. Ridesharing may save ride costs, increase vehicle utilization, and reduce air pollution. A rider may use a ridesharing service through a ridesharing service application accessed by the rider&#39;s mobile device. 
     SUMMARY 
     Embodiments consistent with the present disclosure provide systems and methods for vehicle ridesharing and for managing a fleet of ridesharing vehicles. For example, consistent with the disclosed embodiments, the fleet of ridesharing vehicles may include more than 10 ridesharing vehicles, more than 100 ridesharing vehicles, or more than 1000 ridesharing vehicles that pick up multiple users and drop them off at locations proximate but other than their desired destinations. 
     Consistent with other disclosed embodiments, non-transitory computer-readable storage media may store program instructions, which are executed by at least one processing device and perform any of the methods described herein. 
     The foregoing general description and the following detailed description are exemplary and explanatory only and are not restrictive of the claims. 
     In one aspect, the invention includes a system for managing a fleet of ridesharing vehicles. The system includes a communications interface configured to receive requests for shared rides from a plurality of users. The system also includes at least one processor configured to receive, via the communications interface, a first request for a shared ride from a first user, the first request including information related to a first pick-up location of the first user, a first desired destination of the first user, and a priority of the first user. The at least one processor is also configured to determine a first estimated drop-off time of the first user based on the first pickup-up location, the first desired destination. The at least one processor is also configured to calculate a mandatory drop-off time for the first user based on the priority. The at least one processor is also configured to assign a rideshare vehicle that can transport the first user to the first desired destination to minimize a difference between the mandatory drop-off time and the estimated drop-off time. 
     In some embodiments, the priority of the first user is based on a medical priority of the first user, user satisfaction, or any combination thereof. In some embodiments, the priority of the first user is based on a type of ride, where the type of ride is a leisure ride, rides scheduled for treatments, emergency rides or a combination thereof. 
     In some embodiments, the priority of the first user is modified during the trip of the first user. In some embodiments, the traffic conditions are at a time of pickup. 
     In some embodiments, the at least one processor is further configured to receive, via the communications interface, a second request for a shared ride from a second user, the second request including information related to a second pick-up location of the second user, a second desired destination of the second user, and a second priority of the second user. The at least one processor is further configured to assign the rideshare vehicle to the second user. The at least one processor is further configured to determine a second estimated drop off time of the second user based on the second pick-up location and the second desired destination. The at least one processor is further configured to calculate a second mandatory drop-off time for the second user based on the second priority. The at least one processor is further configured to calculate a first penalty for the first user based on: i) the medical condition of the first user ii) a first updated estimated arrival of the first user that is the drop-off time of the first user if the second user is dropped off at the second destination before dropping the first user off at the first destination, and iii) the mandatory drop-off time of the first user. The at least one processor is further configured to calculate a second penalty for the second user based on: i) the medical condition of the second user ii) a second updated estimated arrival of the second user that is the drop-off time of the second user if the second user is dropped off at the second destination before dropping the second user off at the second destination, and iii) the mandatory drop-off time of the second user. The at least one processor is further configured to determine a drop off order between the first user and the second user based on the first penalty and the second penalty. The at least one processor is further configured to set a route for the rideshare vehicle based on the drop off order. 
     In some embodiments, if the assigned rideshare vehicle causes the first user to arrive at first desired destination after the mandatory drop-off time, then assign a different rideshare vehicle of the fleet of rideshare vehicles to the first user that causes the first user to arrive at the first desired destination before the mandatory drop-off time. 
     In some embodiments, there are a plurality of users and a priority among the plurality of users is determined based on predefined criteria. In some embodiments, the priority is determined after an event which caused lateness. 
     In one aspect, the invention involves a method for managing a fleet of ridesharing vehicles. The method also involves receiving a first request for a shared ride from a first user, the first request including information related to a first pick-up location of the first user, a first desired destination of the first user, and a priority of the first user. The method also involves determining a first estimated drop-off time of the first user based on the first pickup-up location, the first desired destination. The method also involves calculating, via the computing device, a mandatory drop-off time for the first user based on the priority. The method also involves assigning a rideshare vehicle that can transport the first user to the first desired destination to minimize a difference between the mandatory drop-off time and the estimated drop-off time. 
     In some embodiments, the priority of the first user is based on a medical priority of the first user, user satisfaction, or any combination thereof. In some embodiments, the priority of the first user is based on a type of ride, where the type of ride is a leisure ride, rides scheduled for treatments, emergency rides or a combination thereof. In some embodiments, the priority of the first user is modified during the trip of the first user. In some embodiments, the traffic conditions are at a time of pickup. 
     In some embodiments, the method involves receiving a second request for a shared ride from a second user, the second request including information related to a second pick-up location of the second user, a second desired destination of the second user, and a second priority of the second user. The method involves assigning the rideshare vehicle to the second user. The method involves determining a second estimated drop off time of the second user based on the second pick-up location and the second desired destination. The method involves the calculating a second mandatory drop-off time for the second user based on the second priority. The method involves calculating, via the computing device, a first penalty for the first user based on: i) the medical condition of the first user ii) a first updated estimated arrival of the first user that is the drop-off time of the first user if the second user is dropped off at the second destination before dropping the first user off at the first destination, and iii) the mandatory drop-off time of the first user. The method involves calculating, via the computing device, a second penalty for the second user based on: i) the medical condition of the second user ii) a second updated estimated arrival of the second user that is the drop-off time of the second user if the second user is dropped off at the second destination before dropping the second user off at the second destination, and iii) the mandatory drop-off time of the second user. The method involves determining, via the computing device, a drop off order between the first user and the second user based on the first penalty and the second penalty. The method involves setting a route for the rideshare vehicle based on the drop off order. 
     In some embodiments, if the assigned rideshare vehicle causes the first user to arrive at first desired destination after the mandatory drop-off time, then assign a different rideshare vehicle of the fleet of rideshare vehicles to the first user that causes the first user to arrive at the first desired destination before the mandatory drop-off time. 
     In some embodiments, there are a plurality of users and a priority among the plurality of users is determined based on predefined criteria. In some embodiments, the priority is determined after an event which caused lateness. 
     In another aspect, the invention involves a non-transitory computer program product comprising instructions which when the program is executed cause the computer to receive a first request for a shared ride from a first user, the first request including information related to a first pick-up location of the first user, a first desired destination of the first user, and a priority of the first user. The computer is also caused to determine a first estimated drop-off time of the first user based on the first pickup-up location, the first desired destination. The computer is also caused to calculate a mandatory drop-off time for the first user based on the priority. The computer is also caused to assign a rideshare vehicle that can transport the first user to the first desired destination to minimize a difference between the mandatory drop-off time and the estimated drop-off time. 
     In another aspect, the invention includes a system for managing a fleet of ridesharing vehicles where the system alternates between a fixed route system and one or more on-demand systems. The system includes a memory configured to store fixed route information, wherein the fixed route information includes preplanned routes for the fleet of ridesharing vehicles. The system includes a communications interface configured to receive requests for shared rides from a plurality of users. The system includes at least one processor configured to receive, via the communications interface, a first request for a shared ride from a first user, the first request including information related to a pick-up location of the first user and a first desired destination of the first user. The at least one processor is configured to calculate a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and traffic conditions. The system includes at least one processor configured to assign one vehicle of the one or more of the fleet of ridesharing vehicles to the first user that is between its fixed routes based on proximity to the pick-up location and future fixed route assignment. 
     In some embodiments, the riders of two different on-demand systems are not assigned to the same rideshare vehicle. In some embodiments, the traffic conditions are estimated traffic conditions at the time of pick-up. In some embodiments, proximity is determined based on a distance between the pick-up location and a start location of a next preplanned fixed route for the vehicle. In some embodiments, the one vehicle is between its fixed route for a predetermined period of time. In some embodiments, a second user requesting a shared ride is not assigned to the one vehicle if the second user is associated with a different on-demand system then the first rider. 
     In another aspect, the invention includes a system for managing a fleet of ridesharing vehicles where the system alternates between a fixed route system and one or more on-demand systems. The system also includes a memory configured to store fixed route information, wherein the fixed route information includes preplanned routes for the fleet of ridesharing vehicles. The system also includes a communications interface configured to receive requests for shared rides from a plurality of users. The system also includes at least one processor configured to receive a first request for a shared ride from a first user, the first request including information related to a pick-up location of the first user and a first desired destination of the first user, the first user associated with a first fleet of ridesharing vehicles. The system also includes at least one processor configured to calculate a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and traffic conditions. The system also includes at least one processor configured to assign one vehicle of a second fleet of ridesharing vehicles to the first user that is available based on proximity to the pick-up location and future fixed route assignment. 
     In another aspect, the invention includes a system for managing a fleet of ridesharing vehicles where the system alternates between a fixed route system and one or more on-demand systems. The system includes a memory configured to store fixed route information, wherein the fixed route information includes preplanned routes for the fleet of ridesharing vehicles. The system includes a communications interface configured to receive requests for shared rides from a plurality of users. The system includes at least one processor configured to switch a mode of vehicle having one or more riders following a fixed route prior to reaching an end destination of the fixed route to drop off the one more riders and individual destinations within a geo-fence. 
     In another aspect, the invention involves a method for managing a fleet of ridesharing vehicles to alternate between a fixed route and on-demand. The method involves receiving a first request for a shared ride from a first user, the first request including information related to a pick-up location of the first user and a first desired destination of the first user. The method involves calculating a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and traffic conditions. The method involves assigning vehicle of the one or more of the fleet of ridesharing vehicles to the first user that is between its fixed routes based on proximity to the pick-up location and future fixed route assignment. 
     In some embodiments, riders of two different on-demand systems are not assigned to the same rideshare vehicle. In some embodiments, the traffic conditions are estimated traffic conditions at the time of pick-up. In some embodiments, proximity is determined based on a distance between the pick-up location and a start location of a next preplanned fixed route for the vehicle. In some embodiments, the one vehicle is between its fixed route for a predetermined period of time. In some embodiments, a second user requesting a shared ride is not assigned to the one vehicle if the second user is associated with a different on-demand system then the first rider. 
     In another aspect, the invention involves a method for managing a fleet of ridesharing vehicles for alternating between a fixed route and on-demand. The method also involves receiving a first request for a shared ride from a first user, the first request including information related to a pick-up location of the first user and a first desired destination of the first user, the first user associated with a first fleet of ridesharing vehicles. The method also involves calculating a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and traffic conditions. The method also involves assigning one vehicle of a second fleet of ridesharing vehicles to the first user that is available based on proximity to the pick-up location and future fixed route assignment. 
     In another aspect, the invention includes a non-transitory computer program product comprising instructions which, when the program is executed cause the computer to receive a first request for a shared ride from a first user, the first request including information related to a pick-up location of the first user and a first desired destination of the first user. The computer is also caused to calculate a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and traffic conditions. The computer is also caused to assign one vehicle of the one or more of the fleet of ridesharing vehicles to the first user that is between its fixed routes based on proximity to the pick-up location and future fixed route assignment. 
     In another aspect, the invention includes a system for managing a fleet of ridesharing vehicles that schedules a driver switch during service. The system includes at least one processor configured to receive current vehicle location data for each vehicle of the fleet of ridesharing vehicles, wherein the current vehicle location data includes global positioning system (GPS) data generated by at least one GPS component associated the ridesharing vehicle. The system includes determine for each vehicle of the fleet of ridesharing vehicles whether a respective driver needs to be switched. The system includes for each vehicle that the driver needs to be switched, determine a meeting location for switching between the respective driver and the respective replacement driver, wherein the determination of the meeting location is based at least in part on: a first travel duration for the respective driver to arrive at the meeting location, and a second travel duration for the respective replacement driver to arrive at the meeting location, and direct the first driver and the second driver to the meeting point. 
     In some embodiments, determining a meeting location is further based on desired destinations of passengers riding in the respective ridesharing vehicle, starting points of users scheduled to be picked up by the respective ridesharing vehicle, traffic conditions of a route of the respective ridesharing vehicle, predicted passenger demand of the respective ridesharing vehicle, amount of fuel in the ridesharing vehicle, urgency level of the respective driver for being replaced, a desired drop-off location of the respective driver, or any combination thereof. 
     In some embodiments, determining a meeting location is further based on distance from the route necessary to travel to reach the meeting location, estimated time of arrival at the meeting location, or any combination thereof. In some embodiments, determining whether the respective driver needs to be switched is based on a duration the driver has been driving, a request from the driver to take a break, or any combination thereof. In some embodiments, determining whether the respective driver needs to be switched is based on a preplanned schedule for the driver. 
     In some embodiments, determining the meeting location is based on ensuring the replacement driver arrives before the driver. In some embodiments, determining the meeting location is based on ensuring the ridesharing vehicle deviates from its route a minimum time. In some embodiments, the processor is further configured to transmit a message to the replacement driver that includes the meeting point and a meeting time. 
     In another aspect, the invention involves a method for managing a fleet of ridesharing vehicles that schedules a driver switch during service. The method involves receiving, via a computing device, current vehicle location data for each vehicle of the fleet of ridesharing vehicles, wherein the current vehicle location data includes global positioning system (GPS) data generated by at least one GPS component associated the ridesharing vehicle. The method involves determining, via the computing device, for each vehicle of the fleet of ridesharing vehicles whether a respective driver needs to be switched. The method involves for each vehicle that the driver needs to be switched, determining, via the computing device, a meeting location for switching between the respective driver and the respective replacement driver, wherein the determination of the meeting location is based at least in part on: a first travel duration for the respective driver to arrive at the meeting location, and a second travel duration for the respective replacement driver to arrive at the meeting location, and directing, via the computing device, the first driver and the second driver to the meeting point. 
     In some embodiments, determine a meeting location is further based on desired destinations of passengers riding in the respective ridesharing vehicle, starting points of users scheduled to be picked up by the respective ridesharing vehicle, traffic conditions of a route of the respective ridesharing vehicle, predicted passenger demand of the respective ridesharing vehicle, amount of fuel in the ridesharing vehicle, urgency level of the respective driver for being replaced, a desired drop-off location of the respective driver, or any combination thereof. 
     In some embodiments, determining a meeting location is further based on distance from the route necessary to travel to reach the meeting location, estimated time of arrival at the meeting location, or any combination thereof. 
     In some embodiments, determining whether the respective driver needs to be switched is based on a duration the driver has been driving, a request from the driver to take a break, or any combination thereof. In some embodiments, determining whether the respective driver needs to be switched is based on a preplanned schedule for the driver. 
     In some embodiments, determining the meeting location is based on ensuring the replacement driver arrives before the driver. In some embodiments, determining the meeting location is based on ensuring the ridesharing vehicle deviates from its route a minimum time. In some embodiments, the processor is further configured to transmit a message to the replacement driver that includes the meeting point and a meeting time. 
     In another aspect, a non-transitory computer program product comprising instructions which, when the program is executed cause the computer to receive current vehicle location data for each vehicle of the fleet of ridesharing vehicles, wherein the current vehicle location data includes global positioning system (GPS) data generated by at least one GPS component associated the ridesharing vehicle. The program is further caused to determine for each vehicle of the fleet of ridesharing vehicles whether a respective driver needs to be switched. The program is further caused to for each vehicle that the driver needs to be switched, determine a meeting location for switching between the respective driver and the respective replacement driver, wherein the determination of the meeting location is based at least in part on: a first travel duration for the respective driver to arrive at the meeting location, and a second travel duration for the respective replacement driver to arrive at the meeting location, and direct the first driver and the second driver to the meeting point. 
     In another aspect, the invention includes a system for dynamic tolling for usage of a plurality of infrastructure assets. The system includes a communications interface configured to receive one or more requests to pass through at least one of the plurality of infrastructure assets, each request for access comprising: a vehicle type and one or more potential routes for the vehicle that includes a start and end location. The system includes at least one processor configured to receive for each infrastructure asset of the plurality of infrastructure assets, infrastructure specific inputs comprising real-time vehicle congestion within a geographical location surrounding the infrastructure asset. The system includes at least one processor configured to determine for each of the or more requests for access to pass through a respective infrastructure asset, a toll amount associated with the respective one or more requests, wherein the toll amount is based on the particular infrastructure asset associated with respective request, the real-time vehicle congestion for the particular infrastructure asset associated with the respective request, type of the particular infrastructure asset associated with the respective request, vehicle type associated with the respective request, one or more potential routes for the vehicle associate with the respective request, or any combination thereof. The system includes at least one processor configured to transmit the toll amount to each respective vehicle associate with each of the respective one or more requests. 
     In another aspect, the invention includes the geographical location surrounding the infrastructure asset is a neighborhood, a predefined radial distance from the infrastructure asset, an predefined area surrounding the infrastructure asset, or any combination thereof. 
     In another aspect, the invention includes the one or more requests can include number of passengers on board. In another aspect, the invention includes the at least one processor is further configured to receive for each infrastructure asset of the plurality of infrastructure assets a pollution parameter, noise parameter, or any combination thereof. 
     In one aspect, the invention involves a method for dynamic tolling for usage of a plurality of infrastructure assets. The method involves receiving one or more requests to pass through at least one of the plurality of infrastructure assets, each request for access comprising: a vehicle type and one or more potential routes for the vehicle that includes a start and end location. The method involves receiving for each infrastructure asset of the plurality of infrastructure assets, infrastructure specific inputs comprising: real-time vehicle congestion within a geographical location surrounding the infrastructure asset. The method involves determining for each of the or more requests for access to pass through a respective infrastructure asset, a toll amount associated with the respective one or more requests, wherein the toll amount is based on the particular infrastructure asset associated with respective request, the real-time vehicle congestion for the particular infrastructure asset associated with the respective request, type of the particular infrastructure asset associated with the respective request, vehicle type associated with the respective request, one or more potential routes for the vehicle associate with the respective request, or any combination thereof. The method involves transmitting the toll amount to each respective vehicle associate with each of the respective one or more requests. 
     In some embodiments, the geographical location surrounding the infrastructure asset is a neighborhood, a predefined radial distance from the infrastructure asset, a predefined area surrounding the infrastructure asset, or any combination thereof. 
     In some embodiments, the one or more requests can include number of passengers on board. In some embodiments, the at least one processor is further configured to receive for each infrastructure asset of the plurality of infrastructure assets a pollution parameter, noise parameter, or any combination thereof. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The subject matter regarded as the invention is particularly pointed out and distinctly claimed in the concluding portion of the specification. The invention, however, both as to organization and method of operation, together with objects, features and advantages thereof, can be understood by reference to the following detailed description when read with the accompanied drawings. Embodiments of the invention are illustrated by way of example and not limitation in the figures of the accompanying drawings, in which like reference numerals indicate corresponding, analogous or similar elements, and in which: 
         FIG.  1    is a diagram of a ridesharing management system, according to some embodiments of the invention. 
         FIG.  2    is a diagram of a mobile communications device associated with a ridesharing management system, according to some embodiments of the invention. 
         FIG.  3    is a diagram of an automated ridesharing dispatch system, including ridesharing management server associated with a ridesharing management system, according to some embodiments of the invention. 
         FIGS.  4 A and  4 B  are flowcharts of methods for vehicle ridesharing management, in accordance with some embodiments the invention. 
         FIG.  5    shows timing diagrams of ridesharing arrangements, according to some embodiments of the invention. 
         FIG.  6    is a flow diagram for a method of managing a fleet of ridesharing vehicles, according to some embodiments of the invention. 
         FIG.  7    is a diagram showing a planned ride and an actual ride of a ridesharing vehicle  700  scheduled to pick up a first user and a second user, according to some embodiments of the invention. 
         FIG.  8    is a flow diagram for a method for managing a fleet of ridesharing vehicles that alternate between a fixed route and on-demand, according to some embodiments of the invention. 
         FIG.  9    is a flow diagram of a method for managing a fleet of ridesharing vehicles that schedules a driver switch during service, according to some embodiments of the invention. 
         FIG.  10    is a diagram showing an example of a driver switch during a ridesharing service, according to some embodiments of the invention. 
         FIG.  11    is a flow diagram of a method for dynamic tolling for usage of a plurality of infrastructure assets, according to some embodiments of the invention. 
         FIG.  12    is a diagram showing several example toll amounts for vehicles driving from point A to point B, according to some embodiments of the invention. 
     
    
    
     DETAILED DESCRIPTION 
     In the following detailed description, numerous specific details are set forth in order to provide a thorough understanding of the invention. However, it will be understood by those skilled in the art that the present invention can be practiced without these specific details. In other instances, well-known methods, procedures, and components, modules, units and/or circuits have not been described in detail so as not to obscure the invention. 
       FIG.  1    is a diagram of a ridesharing management system  100 , according to some embodiments of the invention. The ridesharing management system  100  includes one or more user devices  120 A- 120 F (collectively referred to as user devices  120 ) associated with respective users  130 A- 130 F, a network  140 , a ridesharing management server  150 , and a database  170 . The user devices  120  can be mobile communications devices. 
     The users  130 A- 130 F can be riders, drivers and/or other computing systems. In  FIG.  1   , users  130 A- 130 C are riders, users  130 D- 130 E are drivers, and user  130 F is an autonomously driven vehicle user. The user devices  120 A- 120 F can be associated with riders, drivers, and/or other computing systems, such that user devices  120 A- 120 C can be referred to as rider devices,  120 D- 120 E can be referred to as driver devices, and user device  120 F can be referred to as a driving-control device. 
     The network  140  can be coupled to the user devices  120  to facilitate communications between the user devices  120  and the ridesharing management server  150 . For example, the rider  130 A can request a ride via the rider device  120 A that is a smart phone. The request can be transmitted by the user device  120 A to the ridesharing management server  150  through the network  140 . The ridesharing management server  150  can transmit a route to the driver device  120 E to instruct the driver  130 E to pick-up the rider  130 A. The ridesharing management server  150  can transmit a message to the rider  130 A via the rider device  120 A indicating that the driver  130 E is on its way and the message can instruct the rider  130 A to a particular pick-up location. 
     The network  140  can facilitate communications that include receiving ride requests and/or other ride related input from or sending confirmations to the rider devices  120 A- 120 C and/or sending ride service assignments to the driver devices  120 D- 120 E and driving-control device  120 F. 
     The network  140  can be any type of network that provides communications, exchanges information, and/or facilitates the exchange of information between ridesharing management server  150  and user devices  120 . For example, network  140  can be the Internet, a Local Area Network, a cellular network, a public switched telephone network (“PSTN”), and/or other suitable connection(s) that enables ridesharing management system  100  to send and/or receive information between the components of the ridesharing management system  100 . The network  140  can be wired and/or wireless depending on the type of connection to the network  140 . Although the network  140  is shown herein as a cloud, the network  140  can include a variety of computing components, including wired and wireless components that in various networked configurations to facilitate desired communication between components. 
     The network  140  can support a variety of messaging formats as is known in the art, and may support a variety of services and applications for user devices  120 . For example, the network  140  can support navigation services for user devices  120 , such as directing users and/or ridesharing service vehicles to pick-up and/or drop-off locations. 
     The ridesharing management server  150  can be a system that communicates with and/or is part of a communication service provider which provides a variety of data or services, such as voice, messaging, real-time audio/video, to users, such as users  130 A- 130 E. The ridesharing management server  150  can be a computer-based system including computer system components, desktop computers, workstations, tablets, handheld mobile communications devices, memory devices, and/or internal network(s) connecting the components. 
     The ridesharing management server  150  can receive information from user devices  120  over the network  140 , process the information, store the information, and/or transmit information to mobile communications devices  120  over network  140 . The ridesharing management server  150  can receive ride requests from user devices  120 A- 120 C. The ridesharing management server  150  can send ride confirmation and/or ride fare information to user devices  120 A- 120 C. The ridesharing management server  150  can send ride service assignments (e.g., including pick-up and/or drop-off location information) to driver devices  120 D and  120 E, and driving-control device  120 F. 
     The ridesharing management server  150  can receive user input from user devices  120 A- 120 C. For example, the ridesharing management server  150  can receive various ride service parameters, such as walking distance to a pick-up location, maximum delay of arrival/detour, and/or maximum number of subsequent pick-ups. 
     The rideshare vehicle can be a car, van, SUV, truck, bus or any kind of vehicle suitable for human transportation. In some embodiments, a vehicle is a taxi. In some embodiments, a rideshare vehicle can be an autonomous vehicle, wherein a control device integrated with the vehicle or a management system separate from the vehicle can send operational messages. 
     The ridesharing management server  150  can calculate ride fares based on a solo portion of a user&#39;s ride and a shared portion of the ride. The ride fare calculation can be based on various ride service parameters set by the user, such as the walking distance involved in the ride, and/or user selection regarding toll road usage. 
     The database  170  may include one or more physical and/or virtual storages coupled with the ridesharing management server  150 . The database  170  can store user account information (e.g., registered rider and/or driver accounts) and/or corresponding user profiles (e.g., contact information, profile photos, and/or associated mobile communications device information). User account information for a rider can include ride history, service feedback, complaints, and/or comments. User account information for a driver can include number of ride service assignments completed, ratings, and/or ride service history information. The database  170  can store various ride requests received from user devices  120 A- 120 C. Each ride request can include a corresponding starting point and desired destination information, user input regarding various service parameters, pick-up and drop-off locations, time of pick-up and drop-off, ride fares, and/or other user feedback (e.g., user comments). 
     The database  170  may include traffic data, maps, and/or toll road information, which may be used for ridesharing service management. The traffic data may include historical traffic data and/or real-time traffic data regarding a certain geographical region. The traffic data may be used to determine traffic conditions. Traffic data and traffic conditions can be used to estimate pick-up and drop-off times for riders and/or determine an optimal route for a particular ride or for all rides. The real-time traffic data may be received from a real-time traffic monitoring system, which may be integrated into or independent from ridesharing management system  100 . 
     The maps may include map information (e.g., roads, streets and/or distances) typically used for navigation purposes. The map information can be used to determine potential routes and in transit routes for the rideshare vehicles and/or guiding the users to a pick-off or drop-off location. Guiding the users to a pick-up or drop off location can include displaying a map, outputting audio, displaying a list of directions or any combination thereof. The in transit routes can be modified based on adding or reducing passengers, the driver driving off the route, speed and/or other updates. Toll road information may include amount of toll charges regarding certain roads, and any change or updates thereof. Toll road information may be used to calculate ride fares. In some embodiments, a rider can specify that the rideshare vehicle route avoids toll roads. 
     The data stored in database  170  can be transmitted to the ridesharing management server  150  for accommodating ride requests. In some embodiments, the database  170  is stored in a cloud-based server (not shown) that is accessible by the ridesharing management server  150  and/or user devices  120  through the network  140 . In some embodiments, the database  170  reside within the ridesharing management server  150 . 
     During operation, the ridesharing management server  150  can communicate with the driving-control device  120 F to direct the autonomous vehicle  130 F to pick up and drop off riders  130 A- 130 C. In some embodiments, autonomous vehicles capable of detecting objects on the road and navigate to designated locations may be utilized for providing ridesharing services. 
     In various embodiments, the ridesharing management server  150  is implemented on a single server or on multiple servers. Each server can be on a single computing device or distributed among multiple computing devices. In various embodiments, the ridesharing management system  100  includes multiple ridesharing management servers, and each ridesharing management server can serve a category of ridesharing services, ridesharing services associated with a certain category of service vehicles, and/or ridesharing services in a specific geographical region. For example, a first ridesharing management server can direct a first fleet of vehicles, a second ridesharing management server can direct a second fleet of vehicles and a third ridesharing server can direct a third fleet of vehicles. The first, second and third fleet of vehicles can be on-demand services, fixed-route services, or any combination thereof. 
     In some embodiments, a plurality of ridesharing management servers collectively provides a dynamic and integrated ridesharing service system. 
     As shown in  FIG.  1   , users  130 A- 130 E may include a plurality of users  130 A- 130 C, and a plurality of drivers  130 D and  130 E, who may communicate with one another, and with ridesharing management server  150  using various types of user devices  120  that are mobile communications devices. For example, the mobile communications device can include a display such as a television, tablet, computer monitor, video conferencing console, or laptop computer screen. A mobile communications device  120  can further include video/audio input devices such as a microphone, video camera, keyboard and/or web camera. A mobile communications device  120  can include mobile devices such as a tablet or a smartphone having display and/or video/audio capture capabilities. The mobile communications device can include one or more software applications that can facilitate the mobile communications devices to engage in communications, such as IM, VoIP, video conferences. For example, user devices  130 A- 130 C can send requests to ridesharing management server  150 , and receive confirmations therefrom. Drivers  130 D and  130 E can use their respective user devices to receive ride service assignments and navigation information from ridesharing management server  150 , and may contact the users with their respective user devices. 
     In some embodiments, a user may directly hail a vehicle by hand gesture or verbal communication, such as traditional street vehicle hailing. In such embodiments, once a driver accepts the request, the driver can use his respective user device to input the ride request information. Ridesharing management server  150  can receive the information, and accordingly assign one or more additional ride service assignments to the same vehicle, for example, subsequent ride requests received from other user devices  120  through network  140 . 
     In some embodiments, driver devices  120 D and  120 E, and driving-control device  120 F may be embodied in a vehicle control panel, as a part of the vehicle control system associated with a particular vehicle. For example, a traditional taxi company may install a drive device in all taxi vehicles managed by the taxi company. In some embodiments, driver devices  120 D and  120 E, and driving-control device  120 F, may be further coupled with a payment device, such as a card reader installed as a part of the vehicle control panel or as a separate device associated with the vehicle. A user may then use the payment device as an alternative payment mechanism. For example, a user who hails the taxi on the street may pay through the payment device, without using a user device providing ridesharing service. 
       FIG.  2    is a diagram of a mobile communications device  200  (e.g., user device  120   100  as shown above in  FIG.  1   ) associated with a ridesharing management system (e.g.. ridesharing management system  100  as shown above in  FIG.  1   ), according to some embodiments of the invention. The mobile communications device  200  can be used to implement computer programs, applications, methods, processes, or other software to perform embodiments of the invention described in herein. For example, turning back to  FIG.  1   , rider devices  120 A- 120 C, driver devices  120 D and  120 E, and driving-control device  120 F may respectively be installed with a rider side ridesharing application, and a corresponding driver side ridesharing application. 
     Turning back to  FIG.  2   , the mobile communications device  200  can include a memory interface  202 , one or more processors  204  such as data processors, image processors and/or central processing units, and/or a peripherals interface  206 . The Memory interface  202 , one or more processors  204 , and/or peripherals interface  206  can be separate components or can be integrated in one or more integrated circuits. The various components in mobile communications device  200  may be coupled by one or more communication buses or signal lines. 
     Sensors, devices, and subsystems can be coupled to peripherals interface  206  to facilitate multiple functionalities. For example, a motion sensor  210 , a light sensor  212 , and a proximity sensor  214  may be coupled to peripherals interface  206  to facilitate orientation, lighting, and/or proximity functions. One or more sensors  216  can be connected to peripherals interface  206 , such as a positioning system (e.g., GPS receiver), a temperature sensor, a biometric sensor, and/or other sensing devices. A GPS receiver can be integrated with, or connected to, mobile communications device  200 . For example, a GPS receiver may be included in mobile telephones, such as smartphone devices. GPS software can allow mobile telephones to use an internal and/or external GPS receiver (e.g., connecting via a serial port or Bluetooth). A camera subsystem  220  and/or an optical sensor  222 , e.g., a charged coupled device (“CCD”) or a complementary metal-oxide semiconductor (“CMOS”) optical sensor, can be used to facilitate camera functions, such as recording photographs and video clips. 
     Communication functions can be facilitated through one or more wireless/wired communication subsystems  224 , which can include an Ethernet port, radio frequency receivers and transmitters and/or optical (e.g., infrared) receivers and/or transmitters. The specific design and implementation of wireless/wired communication subsystem  224  may depend on the communication network(s) over which mobile communications device  200  is intended to operate. For example, in some embodiments, mobile communications device  200  may include wireless/wired communication subsystems  224  designed to operate over a GSM network, a GPRS network, an EDGE network, a Wi-Fi or WiMax network, and a Bluetooth® network. 
     An audio subsystem  226  may be coupled to a speaker  228  and a microphone  230  to facilitate voice-enabled functions, such as voice recognition, voice replication, digital recording, and/or telephony functions. 
     I/O subsystem  240  may include touch screen controller  242  and/or other input controller(s)  244 . Touch screen controller  242  may be coupled to touch screen  246 . Touch screen  246  and touch screen controller  242  may, for example, detect contact and movement or break thereof using any of a plurality of touch sensitivity technologies, including but not limited to capacitive, resistive, infrared, and surface acoustic wave technologies, as well as other proximity sensor arrays or other elements for determining one or more points of contact with touch screen  246 . While touch screen  246  is shown in  FIG.  2   , I/O subsystem  240  may include a display screen (e.g., CRT or LCD) in place of touch screen  246 . 
     Other input controller(s)  244  may be coupled to other input/control devices  248 , such as one or more buttons, rocker switches, thumb-wheel, infrared port, USB port, and/or a pointer device such as a stylus. Touch screen  246  may, for example, also be used to implement virtual or soft buttons and/or a keyboard. 
     Memory interface  202  may be coupled to memory  250 . Memory  250  includes high-speed random access memory and/or non-volatile memory, such as one or more magnetic disk storage devices, one or more optical storage devices, and/or flash memory (e.g., NAND, NOR). Memory  250  may store an operating system  252 , such as DRAWIN, RTXC, LINUX, iOS, UNIX, OS X, WINDOWS, or an embedded operating system such as VXWorkS. Operating system  252  may include instructions for handling basic system services and for performing hardware dependent tasks. In some implementations, operating system  252  can be a kernel (e.g., UNIX kernel). 
     Memory  250  may also store communication instructions  254  to facilitate communicating with one or more additional devices, one or more computers and/or one or more servers. Memory  250  can include graphical user interface instructions  256  to facilitate graphic user interface processing; sensor processing instructions  258  to facilitate sensor-related processing and functions; phone instructions  260  to facilitate phone-related processes and functions; electronic messaging instructions  262  to facilitate electronic-messaging related processes and functions; web browsing instructions  264  to facilitate web browsing-related processes and functions; media processing instructions  266  to facilitate media processing-related processes and functions; GPS/navigation instructions  268  to facilitate GPS and navigation-related processes and instructions; camera instructions  270  to facilitate camera-related processes and functions; and/or other software instructions  272  to facilitate other processes and functions. 
     In some embodiments, communication instructions  254  may include software applications to facilitate connection with ridesharing management server (e.g., ridesharing management server  150  as described above in  FIG.  1   ) that handles vehicle ridesharing requests. Graphical user interface instructions  256  may include a software program that facilitates a user associated with the mobile communications device to receive messages from ridesharing management server  150 , provide user input, and so on. For example, a user may send ride requests and ride service parameters to a ridesharing management server and receive ridesharing proposals and confirmation messages. A driver may receive ride service assignments from ridesharing management server, and provide ride service status updates. 
     Each of the above identified instructions and applications may correspond to a set of instructions for performing one or more functions described above. These instructions need not be implemented as separate software programs, procedures, or modules. Memory  250  may include additional instructions or fewer instructions. Furthermore, various functions of mobile communications device  200  may be implemented in hardware and/or in software, including in one or more signal processing and/or application specific integrated circuits. 
       FIG.  3    is a diagram of an automated ridesharing dispatch system  300 , including a ridesharing management server (e.g., ridesharing management server  150  as described above in  FIG.  1   ) associated with a ridesharing management system (e.g., ridesharing management system  100  as described above in  FIG.  1   ), according to some embodiments of the invention. The ridesharing management server  150  can include a bus  302  (or other communication mechanism), which interconnects subsystems and/or components for transferring information within the ridesharing management server  150 . 
     As shown in  FIG.  3   , automated ridesharing dispatch system  300  may include one or more processors  310 , one or more memories  320  storing programs  330  including, for example, server app(s)  332 , operating system  334 , and data  340 , and a communications interface  360  (e.g., a modem, Ethernet card, or any other interface configured to exchange data with a network, such as network  140  in  FIG.  1   ). Automated ridesharing dispatch system  300  can communicate with an external database (e.g., external databased  170  as described above with respect to  FIG.  1   ). Automated ridesharing dispatch system  300  can include a single server (e.g., ridesharing management server  150 ) and/or can be configured as a distributed computer system including multiple servers, server farms, clouds, and/or computers that can interoperate to perform one or more of the processes and functionalities associated with embodiments. 
     The ridesharing management server  150  can be a computer platform that provides services via a network, such as the Internet, it can use virtual machines that may not correspond to individual hardware. The computational and/or storage capabilities can be implemented by allocating appropriate portions of desirable computation/storage power from a scalable repository, such as a data center and/or a distributed computing environment. 
     Processor  310  may be one or more processing devices configured to perform functions of the disclosed methods, such as a microprocessor manufactured by Intel™ or manufactured by AMD™. Processor  310  can include a single core or multiple core processors executing parallel processes simultaneously. For example, processor  310  may be a single core processor with virtual processing technologies. In some embodiments, processor  310  can uses logical processors to simultaneously execute and/or control multiple processes. Processor  310  can implement virtual machine technologies, and/or other technologies to provide the ability to execute, control, run, manipulate, and/or store multiple software processes, applications, programs. In some embodiments, processor  310  includes a multiple-core processor arrangement (e.g., dual and/or quad core) to provide parallel processing functionalities to allow ridesharing management server  150  to execute multiple processes simultaneously. It is appreciated by one of ordinary skill in the art that other types of processor arrangements can be implemented that provide for the capabilities disclosed herein. 
     Memory  320  can be a volatile or non-volatile, magnetic, semiconductor, tape, optical, removable, non-removable, or other type of storage device or tangible or non-transitory computer-readable medium that stores one or more program(s)  330  such as server apps  332  and operating system  334 , and data  340 . Common forms of non-transitory media include, for example, a flash drive, a flexible disk, hard disk, solid state drive, magnetic tape, or any other magnetic data storage medium, a CD-ROM, any other optical data storage medium, any physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM or any other flash memory, NVRAM, a cache, a register, any other memory chip or cartridge, and networked versions of the same. 
     The ridesharing management server (e.g., ridesharing management server  150  as described above in  FIG.  1   ) can include one or more storage devices configured to store information used by processor  310  (or other components) to perform certain functions related to the embodiments. For example, the ridesharing management server may include memory  320  that includes instructions to enable processor  310  to execute one or more applications, such as server apps  332 , operating system  334 , and/or any other type of application or software known to be available on computer systems. Alternatively or additionally, the instructions, and/or application programs, can be stored in an external database  170  (which can also be internal to ridesharing management server  150 ) or external storage communicatively coupled with ridesharing management server  150  (not shown), such as one or more database or memory accessible over network  140 . 
     Database  170  or other external storage may be a volatile or non-volatile, magnetic, semiconductor, tape, optical, removable, non-removable, or other type of storage device or tangible or non-transitory computer-readable medium. Memory  320  and database  170  may include one or more memory devices that store data and instructions used to perform one or more features of the disclosed embodiments. Memory  320  and database  170  may also include any combination of one or more databases controlled by memory controller devices (e.g., server(s), etc.) or software, such as document management systems, Microsoft SQL databases, SharePoint databases, Oracle™databases, Sybase™ databases, or other relational databases. 
     In some embodiments, ridesharing management server  150  may be communicatively connected to one or more remote memory devices (e.g., remote databases (not shown)) through network  140  or a different network. The remote memory devices can be configured to store information that ridesharing management server  150  can access and/or manage. By way of example, the remote memory devices may include document management systems, Microsoft SQL database, SharePoint databases, Oracle™ databases, Sybase™ databases, or other relational databases. Systems and methods consistent with disclosed embodiments, however, are not limited to separate databases or even to the use of a database. 
     Programs  330  may include one or more software modules causing processor  310  to perform one or more functions of the disclosed embodiments. Moreover, processor  310  may execute one or more programs located remotely from one or more components of the ridesharing management system  100 . For example, ridesharing management server  150  may access one or more remote programs that, when executed, perform functions related to disclosed embodiments. 
     In the presently described embodiment, server app(s)  332  may cause processor  310  to perform one or more functions of the disclosed methods. For example, devices associated with users, drivers and autonomous vehicles may respectively be installed with user applications for vehicle ridesharing services, and driver applications for vehicle ridesharing services. Further, a mobile communications device may be installed with both the driver applications and the user applications, for uses in corresponding situations. 
     In some embodiments, other components of ridesharing management system  100  may be configured to perform one or more functions of the disclosed methods. For example, mobile communications devices  120  may be configured to calculate estimate pick-up and drop-off times based on a certain ride request, and may be configured to calculate estimate ride fares. As another example, mobile communications devices  120  may further be configured to provide navigation service, and location service, such as directing the user to a particular pick-up or drop-off location, and providing information about a current location of the respective user or vehicle to ridesharing management server  150 . 
     In some embodiments, program(s)  330  may include operating system  334  performing operating system functions when executed by one or more processors such as processor  310 . By way of example, operating system  334  may include Microsoft Windows™, Unix™, Linux™, Apple™ operating systems, Personal Digital Assistant (PDA) type operating systems, such as Apple iOS, Google Android, Blackberry OS, Microsoft CE™, or other types of operating systems. Accordingly, the disclosed embodiments may operate and function with computer systems running any type of operating system  334 . Ridesharing management server  150  may also include software that, when executed by a processor, provides communications with network  140  through communications interface  360  and/or a direct connection to one or more mobile communications devices  120 . Specifically, communications interface  360  may be configured to receive ride requests (e.g., from user devices  120 A- 120 C) headed to differing destinations, and receive indications of the current locations of the ridesharing vehicles (e.g., from driver devices  120 D and  120 E or driving-control device  120 F). In one example, communications interface  360  may be configured to continuously or periodically receive current vehicle location data for the plurality of ridesharing vehicles that are part of ridesharing management system  100 . The current vehicle location data may include global positioning system (GPS) data generated by at least one GPS component of a mobile communications device  120  associated with each ridesharing vehicle. 
     In some embodiments, data  340  may include, for example, profiles of users, such as user profiles or driver profiles. User profiles can include contact information, profile photos, user account information and/or associated mobile communications device information. Rider account information can include ride history, service feedbacks, complaints, and/or comments. Driver account information can include number of ride service assignments completed, ratings, ride service history, rider ride history, driver service record, and/or communications between a driver and a rider regarding a particular ride request. In some embodiments, data  340  may further include traffic data, toll road information, and navigation information, which may be used for handling and accommodating ride requests. 
     Automated ridesharing dispatch system  300  may also include one or more I/O devices  350  having one or more interfaces for receiving signals or input from devices and providing signals or output to one or more devices that allow data to be received and/or transmitted by automated ridesharing dispatch system  300 . For example, automated ridesharing dispatch system  300  may include interface components for interfacing with one or more input devices, such as one or more keyboards, mouse devices, and the like, that enable automated ridesharing dispatch system  300  to receive input from an operator or administrator (not shown). 
       FIGS.  4 A and  4 B  are flowcharts  410  and  420  of methods for vehicle ridesharing management, in accordance with some embodiments the invention. 
     Turning to  FIG.  4 A , the method involves receiving (e.g., by ridesharing management server  150  as described above in  FIG.  1   ) a first ride share requires from a first wireless mobile communications device (e.g., user device  120  as described above in  FIG.  1   ) of a first user (Step  411 ). For example, a request from user  130 A sent through user device  120 A, as described above in  FIG.  1   . 
     The first ride request can be a request from the first user requesting transportation service from one location to another location. The first ride request can include a first starting point and a first desired destination. 
     The starting point can be a current location of the user or a different location that the user expects to subsequently arrive at (e.g., an entrance of a building). The starting point can be input manually by the user through the user&#39;s device and/or determined automatically by a location service application installed on the user device. 
     The first desired destination can be a location where the user is requesting to be taken to. 
     A pick-up location and a drop-off location can be determined (e.g., can be determined by the ridesharing management server  150  as described above in  FIG.  1   ). The pick-up location and the drop-off location can be the same as (or substantially the same as) or different than the starting point and the first desired destination, respectively. The pick-up location for the rider can be set to be the starting point. The drop-off location can be set to be the first desired destination. 
     In some embodiments, the pick-up location can be a distance from the starting point, where the user may be directed to for pick-up. In some embodiments, the drop-off location can be a distance from the first desired destination. The distance can be input by the user (e.g., the user rider or driver can set a maximum distance), determined by the ridesharing management server (e.g., based on surrounding area and/or input by an admin), or any combination thereof, as discussed in further detail below. The distance between the pick-up location and starting point, and the distance between the drop-off location and the first desired destination can be the same or different. 
     In various embodiments, the user can be encouraged to walk the distance for pick-up, drop-off or both. In some embodiments, the vehicle ridesharing service management system provides incentives and/or rewards for users who are willing to walk a distance. The incentives/rewards can be based on a length of the distance and/or a number of distances walked (e.g., distances of the walks involved in a particular ride, cumulative distances over the course of time, number of distances walked in one trip, number of distances walked over multiple trips). In some embodiments, the ridesharing management offers ride credits corresponding to the number and distance of the walks undertaken by the user during his rides. The user can use the credits for subsequent ride payment, redeem the credits for money, free rides, and/or other rewards. 
     Having a user walk the distance can provide advantages for the ridesharing vehicle. For example, a distanced pick-up/drop-off location can allow the vehicle to more easily and/or quickly locate the user without an excessive detour or avoid excessive delays for other riders who are in the vehicle. In another example, a distanced pick-up/drop-off location can allow a vehicle to accommodate subsequent pick-ups and/or arrive at subsequent pick-up locations more quickly. Additional examples can include more efficient vehicle use and management, more user flexibility, and/or less air pollution associated with vehicle use due to, for example, shorter trips. 
     In some embodiments, prior to or after the user sends a ride request, the user can input ride service parameters through a settings component provided on a user interface. Ride service parameters can include a maximum walking distance from the starting point to a pick-up location, a maximum walking distance from a drop-off location to a desired destination, a total maximum walking distance involved in a ride, a maximum number of subsequent pick-ups, maximum delay of arrival/detour incurred by subsequent pick-ups during a ride, and/or a selection whether to permit toll road usage during the ride. 
     The ride service parameters can be transmitted to ridesharing management server for processing the request and assignment of an available vehicle based on the ride service parameters. For example, a ride request may be associated with a maximum walking distance of 300 meters from a starting point to a pick-up location. When assigning an available vehicle to pick up the user, ridesharing management server can include in the assignment an assigned pick-up location within 300 meters or less of the starting point. A ride request can be associated with a maximum walking distance of 0.5 mile from a drop-off location to a desired destination. When assigning an available vehicle to pick up the user, ridesharing management server  150  may include in the assignment an assigned drop-off location within 0.5 mile or less from the desired destination. 
     For requests associated with a maximum total walking distance of one mile during the ride, when assigning an available vehicle to pick up the user, ridesharing management server  150  may include in the assignment an assigned pick-up location and an assigned drop-off location, a total of a distance from the starting point to the assigned pick-up location and a distance from the assigned drop-off location to a desired destination may be equal to or less than one mile. 
     In the above examples, the values regarding the walking distances are only exemplary. The distances can be measured in units of miles, meters, kilometers, blocks, and/or feet. In some embodiments, the distance can be represented by an average walking time from a certain location to another, based on average walking speed, for example, ten minutes, five minutes, etc. 
     With respect to parameters regarding subsequent pick-ups, such as a maximum number of subsequent pick-ups, and maximum delay of arrival incurred by subsequent pick-ups, ridesharing management server can assign subsequent pick-ups accordingly, without exceeding the parameters set by the user. For example, a ride request may be associated with a maximum number of two subsequent pick-ups during the ride. Ridesharing management server can monitor a service status of the vehicle assigned to pick up the user, and refrain from assigning a third subsequent pick-up before the vehicle arrives at the a drop-off location for dropping off the user. In another example, for a ride request associated with a maximum delay of arrival of ten minutes, when assigning subsequent ride requests, ridesharing management server  150  may calculate an estimated delay that may occur to the user if the same vehicle was to undertake the subsequent ride request. If the estimated delay that may occur to the user is more than ten minutes, ridesharing management server  150  may assign the subsequent ride request to other available vehicles. 
     In some embodiments, the user may also input selection of toll road usage through the associated user device, to allow or disallow use of toll roads. Ridesharing management server can take the user&#39;s selection into account when assigning an available vehicle for accommodating the ride request, determining travel route, and calculating ride fare for the user. For example, ridesharing management server  150  may adjust the ride fare amount for a corresponding user based on the toll roads selection input and toll charges involved. For another example, if a first user does not permit toll road usage, before any subsequent pick-ups during the ride, ridesharing management server  150  may send a route to an assigned vehicle that does not include toll roads. In another example, if a subsequent user sharing the ride permits usage of toll road, ridesharing management server  150  may not charge the first user for any overlap portion of the ride where toll roads are used, change the route to include toll roads after the first user is dropped off, or assign the second user to a ridesharing vehicle with users that permit toll road usage. 
     In some embodiments, the ride request information may also be input from the driver device, for example, driver device  120 D, or from a device associated with the vehicle. In the case of street hailing, where the user hails a vehicle on the street without using a vehicle ridesharing service application on a mobile communications device, the driver, for example, driver  130 D, may input information such as the starting point/pick-up information and destination information through driver device  120 D, which may then be transmitted to ridesharing management server  150 . 
     The method can also involve calculating (e.g., by ridesharing management server  150  as described above in  FIG.  1   ) an estimated pick-up time for the first rider (Step  413 ). The estimated pick-up time can be based on a current location of the assigned vehicle and the pick-up location of the rider included in the first ride request. The estimated pick-up time can be a time period before an assigned vehicle arrives at the pick-up location for picking up the user. 
     The assigned vehicle can be the vehicle that is assigned to undertake the first ride request, for example, a taxi in a taxi fleet, one of a plurality of vehicles managed by a transportation service system, or a plurality of vehicles owned by a plurality of owners and used to provide ridesharing services. 
     The estimated pick-up time may be determined based on a distance between a current location of the assigned vehicle and the pick-up location, and an estimate speed of traveling along the route between the two locations. The current location of the assigned vehicle can be determined by a location service application installed on a driver device, a driving-control device, and/or by a location determination component in the ridesharing management system (e.g., ridesharing management system  100  as described above in  FIG.  1   . In some embodiments, the estimated pick-up time may further be determined based on historical or real-time traffic data, and/or a route currently followed by the vehicle. 
     In some embodiments, process  410  may further include locating one or a plurality of potential available vehicles, and selecting an assigned vehicle therefrom. For example, potential available vehicles may include vacant vehicles from a fleet of rideshare vehicles in the surrounding areas of the first pick-up point, and vehicles heading to a location close to the first pick-up point for assigned pick-ups or drop-offs. The ridesharing management server can filter potential available vehicles by ride service parameters set by the users who are inside the vehicle, for example, removing occupied vehicles where a user inside the vehicle does not permit subsequent pick-ups, or occupied vehicles where the user requires a minimal delay. In some embodiments, the ridesharing management server filters potentially available vehicles by choosing a vehicle that causes minimal walking of the user, or walking of the user that refrains from requiring the user to cross the street. In some embodiments, the ridesharing management server can filter potential assignment vehicles by choosing a vehicle that takes minimal detours for the vehicle to arrive at the pick-up location. In some embodiments, the potentially available vehicle may be selected by applying multiple filter criteria, or by applying multiple filter criteria in a certain order. 
     In some embodiments, the ridesharing management server adjusts the selection of the pick-up location based on filtering results of potential assignment vehicles, or vice versa. The two selection processes can complement each other to reach one or more optimal combinations. In various embodiments, the ridesharing management server assigns a pick-up location that is along a main street that an assigned vehicle can easily locate and/or at a location which that does not require an assign vehicle to take a U-turn. In cases where there are one or more other users in the vehicle, the ridesharing management server  150  can assign a pick-up location close to the vehicle&#39;s next assigned drop-off and/or on a side of a street that the vehicle has to ride through for routes for riders already in the vehicles. 
     In some embodiments, where there are multiple potential assignment vehicles, each with a corresponding potential pick-up location, an estimated pick-up time can be respectively calculated corresponding to each of the potential assignment vehicles. In some embodiments, the ridesharing management server chooses the vehicle with the shortest estimated pick-up time as the assigned vehicle. 
     The method also involves sending (e.g., via ridesharing management server  150  as described above in  FIG.  1   ) a first message to a user device (e.g., user device  120 A as described above in  FIG.  1   ) associated with the first user. The first message can cause an indication of the calculated first estimated pick-up time to appear on a display of the user&#39;s device. The message can appear as a text message including the estimated pick-up time, as an audio message, and/or an image. 
     In some embodiments, the message includes a confirmation that the ridesharing request is accepted. If the ridesharing management server assigns a pick-up location that is different from the starting point, the message can cause an indication of the assigned pick-up location to be presented to the user. The ridesharing management server can provide a navigation option which can displayed on a user interface. 
     A selection of the navigation option can provide walking directions the user to the pick-up location for pick-up. The message can cause a display of an indication of an estimated walking distance from the starting point to the assigned pick-up location. The message can include an estimated walking distance from the assigned drop-off location to the desired destination. The assigned drop-off location can be a location within the maximum walking distance parameters set by the first user. For example, the drop-off location can be at a location a half a block away or further from the desired destination, and can be along a main street where the vehicle may easily locate and access. In another example, the drop-off location can be determined based on a route that is headed towards a next pick-up location, such that the vehicle can easily drop off the first user on its way to the next pick-up location, thereby avoiding an extra detour. 
     In another embodiment, the message may include one or more proposals associated with different vehicles. Each proposal may include information about the proposed pick-up location. The information about the proposed pick-up location can include the distance from the user to the proposed pick-up location. Each proposal may include a price of the ride associated, type of the ride (e.g., single vs. shared, SUV vs. sedan), and an estimation of a pick-up time. The estimate may be presented as a range. For example, each proposal can include a unique combination of pick-up locations, price, and/or estimations of a pick-up time. 
     In some embodiments, step  415  can also include receiving a proposal selection (e.g., one selection of multiple options that is presented to a rider) reflective of a selected pick-up vehicle and sending an addition message that includes information about the selected vehicle, and the driver associated with the vehicle. For example, the vehicle information may include the license plate number, brand, color, and/or model of the vehicle. The driver information can include a name, nickname, profile photo, ratings, number of previous rides, and/or contact information of the driver. The message can include a contact option allowing the user to contact the driver, for example, a “contact the driver” button, which the user can select to initiate a communication session with the driver. 
     The method can also involve guiding (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ), the assigned vehicle to the pick-up location to pick up the first user. For example, ridesharing management server can transmit a route (e.g., route shaped on a map) direction information and/or navigation instructions to the driver device associated with the assigned vehicle, for example, driver device  120 D or driving-control device  120 F as described above in  FIG.  1   . In some embodiments, a navigation component of the driver device, or the driving-control device performs the step of guiding the vehicle to the first pick-up location. The ridesharing management server  150 , or a navigation component of the user device (e.g., user device  120 A as described above in  FIG.  1   ), can guide the user to the first pick-up location, in cases where the pick-up location is at a location that is different from the starting point. For example, for autonomous vehicles used for ridesharing services, such as autonomous vehicle  130 F as shown in  FIG.  1   , the vehicle itself may be capable of using a variety of techniques to detect its surroundings, identify feasible paths, and navigate without direct human input. 
     In some embodiments, once the vehicle is assigned to pick up the user, ridesharing management server assigns a communication channel for the driver associated with the assigned vehicle to communicate with the user, for example, a masked phone number. In some embodiments, a user interface of a driver device includes an option to send notification messages to the user, for example, a pre-defined message button of “I&#39;m here.” Once the vehicle arrives at the pick-up location, the driver can click the message button to send the message to the user. This way, the driver may not need to dial out or type a message in order to notify the user of the vehicle&#39;s arrival, e.g., reducing driver distraction and associated safety hazards. 
     The method can also involve receiving (e.g., via a ridesharing management server  150  as described above in  FIG.  1   ) a second ride request from a second user via a second user device. The second ride request can be received by ridesharing management server from a second wireless mobile communications device, for example, user device  120 B associated with user  130 B as shown in  FIG.  1   . The second ride request can include a second starting point, and a second desired destination. Ridesharing management server can assign a corresponding vehicle from a fleet of ridesharing vehicles, which may be the vehicle that has picked up the first user, before dropping off the first user. In processing the second ride request, the example process  420  as shown in  FIG.  4 B  may be performed. 
     In some embodiments, the second user&#39;s request is a street hailing request received directly by the assigned vehicle while the first user is still inside, namely, before dropping off the first user. The vehicle can undertake the second ride request, if the first user&#39;s ride service parameters set by the first user permits subsequent pick-ups. In some embodiments, the driver of the vehicle may input the second ride request information through a driver device, for example, driver device  120 D associated with driver  130 D. The input can inform the ridesharing management server that the rideshare vehicle has undertaken a second ride request, and/or can include the pick-up location and destination information of the second user. The ridesharing management server  150  can determine whether to assign additional pick-ups to the same rideshare vehicle, and can send direction information guiding the rideshare vehicle to the second user&#39;s destination. 
     Turning to  FIG.  4 B ,  FIG.  4 B  show a method for a ridesharing management server to instruct the ride sharing vehicle of  FIG.  4 A  to pick-up a second user, according to some embodiments of the invention. The method can involve calculating (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) a second estimated pick-up time based on a second current location of the vehicle and the second starting point (Step  422 ). The second estimated pick-up time can be an estimated time period before the rideshare vehicle arrives at a second pick-up location for picking up the second user. The second pick-up location can be an assigned pick-up location different from, but associated with, the second starting point. Assignment of the second pick-up location can include similar steps as described above with reference to  FIG.  4 A  in assigning the first pick-up location, details of which are not repeated herein. 
     The method can also involve sending (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) a second message to the second wireless mobile communication device (e.g., the user device  120 B as described above in  FIG.  1   ). The second message can cause an indication of the calculated second estimated pick-up time to appear on a display of the second wireless mobile communication device. As described above with reference to  FIG.  4 A , the message can appear on the display of the second user&#39;s device with various proposal and options, the details of which are not repeated herein. 
     In some embodiments, where the first user has not been picked up yet, the ridesharing management server sets the second pick-up location at substantially the same location as the first pick-up location, for example, half a block away, or 100 meters away from the first pick-up location. This way, the vehicle may pick up both users at about the same time at substantially the same location, to, for example, improve service efficiency. In some embodiments, the ridesharing management server sets the second pick-up location at a substantially the same location as the first drop-off location, wherein the vehicle may drop off the first user, and pick up the second user at about the same time, without substantial extra travelling. In some embodiments, the second drop-off location is set at substantially the same location as the first drop off location, such that the vehicle may drop off multiple users at the same time (or substantially the same time). 
     In some embodiments, the ridesharing management server sets the first pick-up location to substantially differ from the first starting point, and the second pick-up location to substantially differ from the second starting point to, for example, ensure both pick-up locations are along the same side of the same street that the vehicle travels along. The ridesharing management server can send respective directions to the first user device and the second user device, to guide the users to the respective pick-up locations. 
     In some embodiments, the ridesharing management server sets the first pick-up location at substantially the same as the first starting point, and set the second pick-up location to substantially differ from the second starting point. For example, the pick-up locations can be set such that the first pick-up location and the second pick-up location are close to one another, both pick-up locations are along the same street, or the second pick-up location is close to the first drop-off location. The ridesharing management server can send respective directions to the first user device and the second user device to, for example, guide the users to the respective pick-up locations. 
     The method can also involve guiding (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) the vehicle to a second pick-up location for picking up the second user. As described above with reference to  FIG.  4 A , this step may also be performed by a navigation component of the driver&#39;s device (e.g., driver device  120 D or driving-control device  120 F associated with autonomous vehicle  130 F). 
     In some embodiments, the ridesharing management server changes the first drop-off location after receiving the second ride request, and the change may be made without pre-approval of the first user. The first drop-off location refers to a location for dropping off the first user. As described above with reference to  FIG.  4 A , the first drop-off location may be the same as the first desired destination, or at a location different from the first desired destination. 
     For example, the second pick-up location may be set at a location close to the first desired destination, included in the first ride request. When assigning the second ride request to the vehicle, the ridesharing management server can change the first drop-off location to a location closer to or at the first desired destination, thus reducing the walking distance for the first user to arrive at his desired destination. For another example, the first drop-off location may be changed to a location where the first user does not need to cross the street to arrive at his desired destination, without causing or increasing detour for the vehicle to arrive at the second pick-up location. 
     In some embodiments, the ridesharing management system can receive a plurality of subsequent ride requests. These additional ride requests can be received by the ridesharing management server and assigned to one or more vehicles of the fleet of ridesharing vehicles, or received by the vehicles in the form of street hailing. Steps described above with reference to  FIGS.  4 A and  4 B  may similarly be used to process the third ride request. 
     For example, the ridesharing management server (e.g., the ridesharing management server  150  as described above in  FIG.  1   ) can receive a third ride request from a third user device, for example, user device  120 C associated with user  130 C, as shown in  FIG.  1   . The ridesharing management server can process the request and assign the request to the rideshare vehicle while the first user and/or the second user is still in the vehicle. The third ride request can include a third starting point and/or a third desired destination. The ridesharing management server can calculate a third estimated pick-up time, and send a confirmation to a user&#39;s device. The ridesharing management server can transmit navigation instructions and/or route information to the driver&#39;s device associated with the vehicle (e.g., driver device  120 D as shown in  FIG.  1   ), to guide the vehicle to pick up and drop off user  130 C. 
     As described above with reference to  FIGS.  4 A and  4 B , processing of subsequent ride requests may take into account of the ride service parameters set by the users whose requests have previously been received and assigned. For example, if both the first user and the second user are still in the vehicle, and one of them has set a maximum delay of arrival, ridesharing management server  150  may not assign the third request to the same vehicle if such assignment causes a delay longer than the set value. For example, if the first user has set a maximum delay of arrival of 10 minutes, ridesharing management server  150  may calculate an estimated time period it takes for the vehicle to pick up (and/or drop off) the third user before dropping off the first user. If the estimated time causes a total delay of arrival for the first user to exceed 10 minutes, ridesharing management server  150  may therefore assign the third ride request to another vehicle. For another example, if the second user has set a maximum number of one co-rider and the second user will be dropped off earlier than the first user, ridesharing management server  150  may not assign to the same vehicle, as such assignment may cause violation of the parameter (maximum number of one co-rider) set by the second user. 
       FIG.  5    shows timing diagrams of ridesharing arrangements, according to some embodiments of the invention. Timelines  510 ,  520 , and  530  show an example of order of pick-up and drop-off varying for a second user of a rideshare vehicle undertaking a first ride request from a first user and a second ride request from a second user. For example, the ridesharing management server can receive a plurality of ride requests, design an optimal path and/or pick-up/drop-off order for a particular assigned vehicle undertaking multiple requests, and assign additional pick-ups as the vehicle completes a part of or all of the ride requests. As shown in example timeline  510 , the rideshare vehicle receives a second ride request after picking up the first user, and drops off the first user before dropping off the second user. A corresponding shared ride portion can be the portion of ride between the pick-up of the second user and drop-off of the first user. As shown in timeline  520 , the rideshare vehicle may receive a second ride request after picking up the first user, and drop off the second user before dropping off the first user. A corresponding shared ride portion may be the portion of ride between the pick-up of the second user and drop-off the second user. As another example, as shown in example timeline  530 , the rideshare vehicle may receive the first ride request and the second ride request before any pick-up. The vehicle may then pick up the second user before picking up the first user, and drop off the second user before dropping off the first user. A corresponding shared ride portion may be the portion of ride between pick-up of the first user and drop-off of the second user. Depending on the order of pick-ups and drop-offs, the ridesharing management server may then determine a corresponding shared ride portion, and calculate ride fare for each user based on, for example, the shared portion, solo portion of each user, and/or other factors such as the ride service parameters set by each user. 
     In some embodiments, it can be desirable to assign rideshare vehicles to users based on a priority. For example, in some scenarios, some riders can have a priority that is higher than other riders, such that a first user can be reassigned to a different ridesharing vehicle before being picked up and/or deprioritized on a pick-up and/or drop-off schedule a particular ridesharing vehicle in favor of a second user. In some embodiments, a first user can have a priority while a second user does not. Absent a priority, a user can be assigned a lowest priority. 
       FIG.  6    is a flow diagram for a method  600  of managing a fleet of ridesharing vehicles, according to some embodiments of the invention. The method can involve receiving (e.g., via the ridesharing management server  150  as described above with respect to  FIG.  1   ), a first request for a shared ride from a first user (e.g., user  130 A as described above in  FIG.  1   ). (Step  610 ). The first request can be transmitted from the first user via a corresponding user device (e.g., user device  120 A as described above in  FIG.  1 A .) The first request can include information related to a first pick-up location of the first user, a first desired destination of the first user, and a priority of the first user. 
     The information related to the first pick-up location of the user can include a starting point of the first user. As described above, the starting point can be a current location of the user as input by the first user or determined by location services of the user&#39;s device. The starting point of the user can be the first pick-up location of the user, or the first pick-up location can be a distance from starting point, as described above with respect to  FIG.  4 A . 
     The priority of the first user can be determined when scheduling the ride. For example, a ride for a user with cancer heading to a chemotherapy session in the hospital can be prioritized over a regular user heading to Central Park. The priority of the first user can be determined based on a user defined priority, type of ride, medical condition, user satisfaction, number of prior complaints, a user defined priority for a group of users, and/or a financial penalty associated with late delivery. In some embodiments, the priority of the first user can be based on accumulated lateness events. For example, if the first user previously had one vehicle that did not show up, was assigned to a second vehicle that did not show up, the first user can be given a high priority. 
     The types of ride can include leisure rides, rides for scheduled treatments and/or emergency rides. For example, if the type of ride is a scheduled dialysis treatment for a first user, and a leisure ride to the mall for a second user, the first user can be given priority. In some embodiments, the first user and the second user can both have equal medical priority (e.g., both have dialysis treatments scheduled). In these embodiments, a priority can be assigned between the first user and the second user by determining a financial penalty associated with each arriving late and setting a priority for pick-up/drop off between the first user and the second user to minimize a financial penalty. For example, some governmental agencies charge a late fee if a ride service picks up and/or delivers patients with certain medical conditions late to certain services. For example, a penalty of 100$ for being late by more than 30 minutes without completing the ride or a penalty of 50$ for being late my more that 30 minutes where the ride is eventually completed. Penalties can also be assign on lateness statistics, e.g—if more than 5% of rides are late by more than 15 minutes, 200$ penalty can be given for each 1% above the 5% threshold. The late fee can be dependent upon the duration of lateness, the medical condition of the user, and/or the type of ride. In some embodiments, a priority is chosen to minimize an aggregate financial penalty between all riders for picking-up and/or delivering all riders late. 
     The priority can be determined at the time of ride assignment. In some embodiments, the priority can be modified during the trip. For example, a type of ride for the first user can change in real time from a leisure ride to an emergency ride (e.g., the user&#39;s wife goes into labor). In these embodiments, the priority for the first user can change during the trip. In some embodiments, the type of ride can be determined based on details about the user from sources other than the ride request (e.g., a hospital, an insurance company and/or a social network). 
     In some embodiments, whether the first user or the second user is going to be picked-up or dropped-off late depends on real-time data. The real-time data can include traffic data, location data, reports of vehicle malfunction and/or weather data. 
     In some embodiments, a group of users is assigned to a fleet of vehicles and a priority among the group can be assigned. For example, for a fleet of vehicles assigned to a corporate outing, a keynote speaker can be assigned a higher priority over regular attendee. 
     In some embodiments, a user who uses the ridesharing vehicle above a certain use threshold or a user who consistently provides online reviews of the ridesharing service can be assigned a priority over an intermittent regular user who does not provide reviews. 
     In some embodiments, the priority can be based on an estimated likelihood of future communications with users. For example, it can be estimated that prioritizing the second user over the first user is likely to result in less communication. 
     In some embodiments, a priority can be assigned based on number of users. For example, a first user can be a single rider while a second user can include a group of riders. The group of riders can be assigned a higher priority than the single rider. 
     The method can involve determining (e.g., via the ridesharing management server  150  as described above with respect to  FIG.  1   ), a first estimated drop-off time of the first user based on the first pickup-up location, the first desired destination and traffic conditions (Step  620 ). In some embodiments, the traffic conditions are estimated traffic conditions at the time the rideshare vehicle is expected to be transporting the first user. The traffic conditions can be determined from received traffic data (e.g., traffic data from database  170  as described above in  FIG.  1   ). 
     The method can also involve calculating (e.g., via the ridesharing management server  150  as described above with respect to  FIG.  1   ), a mandatory arrival time for the first user based on the priority (Step  630 ). The mandatory arrival time can be determined based on the priority and/or the type of ride the user is requesting. For example, for a user that has dialysis treatment scheduled the mandatory arrival time can be set based on the appointment time. For a user that has a flight, the mandatory arrival time can be set based on the flight time. In some embodiments, each ride includes a commitment window which is a window of time for drop-off. The mandatory arrival time can be set to the be the latest point of time of the window. The size of the window can be how much earlier the rider can be dropped off. For example, assume that the mandatory arrival time is Tm and the rider can be dropped off at the earliest time of Tm—10 minutes. In this example, the commitment window has a size of 10 minutes. In some embodiments, for a rider with a high priority, the system minimizes a risk that the vehicle arrives late (e.g., beyond the window) even if other riders will arrive outside of their window. 
     In some embodiments, the mandatory arrival time is not crucial for the rider and is an estimated drop-off time. For example, for a user taking a leisure ride with a low priority. 
     The method can also involve assigning (e.g., via the ridesharing management server  150  as described above with respect to  FIG.  1   ), a rideshare vehicle that can transport the first user to the first desired destination to minimize a difference between the mandatory arrival time and an estimated drop-off time (Step  640 ). The rideshare vehicle can be assigned from a fleet of rideshare vehicles as described above. The rideshare vehicle can be assigned such the rideshare vehicle can pick-up the first user at the pick-up location and drop-off the first user at the first desired destination to minimize the difference between mandatory arrival time and the estimated drop-off time such that the first user arrives at the mandatory arrival time. 
     In some embodiments, if a first estimated drop-off time for a first rideshare vehicle of the fleet of rideshare vehicles is before the mandatory arrival and a second estimated drop-off time for a second rideshare vehicle of the fleet of rideshare vehicles is after the mandatory arrival vehicle, but the difference between first estimate drop-off time and the mandatory arrival time is greater then the difference between the second estimate drop-off time and the mandatory arrival time, the first rideshare vehicle is assigned to the first user to, for example, ensure the first user arrives before the mandatory arrival time. 
     In some embodiments, the method also involves, receiving a second request (e.g., via the ridesharing management server  150  as described above with respect to  FIG.  1   ) for a shared ride from a second user (e.g., user  130 B as described above with respect to  FIG.  1   ). The second request can include information related to a second pick-up location of the second user, a second desired destination of the first user, and a priority of the first user. 
     The information related to the first pick-up location of the user can include a starting point of the first user. As described above, the starting point can be a current location of the user as input by the first user or determined by location services of the user&#39;s device. The starting point of the user can be the first pick-up location of the user, or the first pick-up location can be a distance from starting point, as described above with respect to  FIG.  4 A . 
     The second request can include information related to a second pick-up location of the second user, a second destination of the second user, and a second priority of the second user. 
     The information related to the second pick-up location of the second user can include a starting point of the second user. As described above, the starting point can be a current location of the second user as input by the second user or determined by location services of the user&#39;s device. 
     The method can involve assigning the rideshare vehicle to the second user. The rideshare vehicle can be the same rideshare vehicle that is assigned to the first user. In some embodiments, a different rideshare vehicle is assigned to the second user. 
     The method can involve determining a second estimated drop-off time of the second user based on the second pick-up location, the second desired destination and traffic conditions. The second estimated drop-off time of the second user can be based on the first desired destination, the proximity of the rideshare vehicle to the second desired destination, and the first user&#39;s priority and the second priority. The second estimated drop-off time can be determined as described above with respect to the first estimated drop-off time, and is not repeated herein. 
     The method can also involve calculating a second mandatory arrival time for the second user based on the second priority. The mandatory arrival time can be determined based on the priority and/or the type of ride the user is requesting. For example, for a user that has dialysis treatment scheduled the mandatory arrival time can be set based on the appointment time. For a user that has a flight, the mandatory arrival time can be set based on the flight time. 
     In some embodiments, the method can involve calculating a first penalty for the first user if the second user is delivered first, and a second penalty for the second user if the first user is delivered first. The penalties can determined as described above. 
     The method can involve determining a drop off order between the first user and the second user based on the first penalty and the second penalty. The first user can have priority over the second user if the first penalty is smaller and vice versa. The method can also involve setting a route for the rideshare vehicle based on the drop off order. 
       FIG.  7    is a diagram showing a planned ride and an actual ride of a ridesharing vehicle  700  scheduled to pick up a first user  702  and a second user  204 , according to some embodiments of the invention. In the planned ride, first user  202  is scheduled to be picked up before second user  704 . Yet, as shown in  FIG.  7   , in the actual ride, the ridesharing vehicle  700  drives to pick up second user  704 . The reason or reasons that caused the change between the planned ride and the actual ride can be based on real-time data about ridesharing vehicle  600  (e.g., location information), real-time data about first user  602  (e.g., medical information), real-time data about second user  604  (e.g., medical information), or any combination thereof, that caused the priority of the second user  604  to become higher than that of the first user  602  after the planned ride was created. The first user  602  can be assigned to a different ridesharing vehicle. 
     In some embodiments, vehicles within fleets of ridesharing vehicles and/or one or more fleets of ridesharing vehicles can operate along fixed routes. Riders of fixed routes can board the rideshare vehicles without requesting rides. This can be desirable, for example, when a portion of a subway line is out of service, or a sporting event. In some embodiments, the ridesharing vehicles can switch between operating along fixed routes and on-demand (e.g., as described above where a user requests a ride). The on-demand service can be a real-time request (or substantially real-time) or pre-scheduled. For example, the on-demand service can be a user requesting service via an app to be picked up as soon as possible. The on-demand service can be a user pre-scheduling a ride to arrive at a particular time (e.g., on a Monday pre-scheduling a ride to the airport on Tuesday). 
     In some embodiments, multiple on-demand fleets of vehicles can be operating in the same geographical areas. Some of the on-demand fleets can have more requests for rides then they can accommodate. In some embodiments, the ridesharing vehicles can switch between fleets. 
       FIG.  8    is a flow chart for a method  800  for managing a fleet of ridesharing vehicles that alternate between a fixed route system and one or more on-demand systems, according to some embodiments of the invention. 
     The method involves receiving (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) a first request for a shared ride from a first user (e.g., user  130 B as described above in  FIG.  1   ) (Step  810 ). The first request can be transmitted from the first user via a corresponding user device (e.g., user device  130 B as described above in  FIG.  1 A .) 
     The first request can include information related to a pick-up location of the first user and a first desired destination of the first user. The first request can be input via a first user device (e.g., user device  120 B as described above in  FIG.  1   ). The information related to the first pick-up location of the user can include a starting point of the first user. As described above, the starting point can be a current location of the user as input by the first user or determined by location services of the user&#39;s device. The starting point of the user can be the first pick-up location of the user, or the first pick-up location can be a distance from starting point, as described above with respect to  FIG.  4 A . 
     The method can involve calculating (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) a first expected drop-off time for the first user based on the pick-up location, the first desired destination, and/or traffic conditions (Step  820 ). In some embodiments, the traffic conditions are estimated traffic conditions at the time the rideshare vehicle is expected to be transporting the first user. The traffic conditions can be determined from received traffic data (e.g., traffic data from database  170  as described above in  FIG.  1   ). 
     The method can involve assigning (e.g., user device  120 B as described above in  FIG.  1   ) one vehicle of the one or more of the fleet of ridesharing vehicles to the first user that is between its fixed route based on proximity to the pick-up location and future fixed route assignment. The proximity can be determined based on a distance between the pick-up location and a start location of a next preplanned fixed route for the vehicle. 
     In some embodiments, the assignment is based on machine learning algorithms (e.g., a convolutional neural network). 
     During fixed route service there can be several scenarios where a vehicle is not driving along the fixed route. For example, if the end of the fixed route is reached and it is not yet time start driving along the beginning of the fixed route again or if the driver is taking a timed break. When vehicles in a fleet of vehicles providing fixed route service is not operating along the fixed route, the vehicle can be made available for on-demand ridesharing rides that allow the vehicle to return to its fixed route service plan on time. Whether a vehicle in the fleet of vehicles operating as fixed route can be switched to operate on demand can depend on a starting location of the vehicle, a starting location and/or pick-up location of the on-demand user, a drop-off location of the user, traffic conditions, and future scheduling of fixed routes for the vehicle. In some embodiments, a vehicle of an on-demand fleet of vehicles can switch to operate along a fixed route. For example, support temporary fixed routes that are needed in emergencies, replace fixed route vehicles that break down. In some embodiments, one vehicle of a first on demand fleet of vehicles is assigned to a second on demand fleet of vehicles. 
     In some embodiments, a fleet of vehicles can be preplanned to operate as on demand for a predetermined operation time, and as fixed route for a predetermined operation time. For example, a fleet of vehicles servicing vaccine recipients can operate as on demand in a city during rush hour, and fixed route to vaccine sites during non-rush hour times. 
     In some embodiments, a vehicle can be operating along a fixed route with several riders, and during operation switch to an on-demand like service to drop off the riders within a geo-fence. For example, if the fixed route end point is to a location that the riders no longer need to go to (e.g., a boxing match that ended much earlier than expected). The geo-fence can be predefined, input by the driver, input by the user, and/or based on a location of the vehicle at the time it switches to an on-demand like service. Each rider can specify or can be assigned a location within the geo-fence to be dropped off. In some embodiments, the geo-fence is large enough to ensure all riders are dropped off at their desired drop-off location. 
     In some embodiments, one or more parameters of the fleet of vehicles can be monitored and used to train artificial intelligence models (e.g., Neural Networks (e.g., CNNs)), to predict for a given fleet when it can efficiently operate as on-demand vs. fixed route. The one or more parameters can include historical demand, current demand, traffic data, one or more events in the service area, or any combination thereof. 
     In various embodiments, switching between fixed route and/or on-demand fleets is in real-time. 
     In some embodiments, riders of two different on-demand systems are not assigned to the same rideshare vehicle. 
     In some embodiments, the ridesharing management server can schedule switching of drivers mid-route during service. Switching drivers during service can minimize an amount of time that a rideshare vehicle is not used by, for example, avoiding directing the ridesharing vehicle to a central location (e.g., a taxi yard), for a driver shift change. Drivers can be switched, for example, at an end of a shift, during a scheduled break, if the driver experiences a medical event and/or for an unexpected person reason. Switching the driver can involve directing a second driver to meet the ridesharing vehicle at a particular location at a particular time along the route of the ridesharing vehicle. 
       FIG.  9    is a flow diagram of a method  900  for managing a fleet of ridesharing vehicles that schedules a driver switch during service, according to some embodiments of the invention. 
     The method involves receiving (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) current vehicle location data for each vehicle of the fleet of ridesharing vehicles (Step  910 ). The current vehicle location data can include global positioning system (GPS) data generated by at least one GPS component associated with each of the ridesharing vehicles. 
     The method can involve determining (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) for each vehicle of the fleet of ridesharing vehicles whether a respective driver needs to be switched (Step  920 ). The determination can be based on preplanned driver switch data, a received indication from a driver that the driver needs an unplanned driver switch and/or a duration the driver has been driving. 
     The preplanned driver switch data can be based on one or more driver schedules that are associated with each rideshare vehicle. The one or more driver schedules can be stored in a database (e.g., database  170  as described above in  FIG.  1   ), transmitted from a driver device, and/or transmitted from a device associated with the rideshare vehicle. The preplanned driver switch data can indicate a time that the driver of a respective vehicle is off duty. 
     The received indication from a driver that the driver needs an unplanned driver switch can be a text message, a phone call, a push button an app transmitted from the driver via a user interface on the driver&#39;s driver device. The indication can include a time for the unplanned switch. 
     The method can involve for each vehicle that the driver needs to be switched (step  930 ) determining a meeting location for switching between the driver and the replacement driver, respectively (Step  940 ). The meeting location can be based a first travel duration for the driver to arrive at the meeting location and a second travel duration for the replacement driver to arrive at the meeting location. The meeting location can be selected such that a first expected arrival time of the ridesharing vehicle to the meeting location is the same as (or substantially the same as) a second expected arrival time of the replacement driver to the meeting point. The meeting location can be selected such that a first expected arrival time of the ridesharing vehicle to the meeting location is later than a second expected arrival time of the replacement driver to the meeting point. The meeting location can be selected such that a difference between the first expected arrival time of the ridesharing vehicle to the meeting location and the second expected arrival time of the replacement driver to the meeting point is within a predefined threshold. The predefined threshold can be determined to minimize the amount of time the vehicle is parked along its route. The predefined threshold can be input by a user. 
     The meeting location can be selected to be along the route of the rideshare vehicle or to minimize a deviation from the route of the rideshare vehicle. The meeting location can be selected to cause a minimum delay in the drop-off of riders in the rideshare vehicle. The meeting location can be input by the driver. The meeting location can be selected to be nearby public transportation. 
     The meeting location can also be based on destinations of passengers riding in the respective ridesharing vehicle, starting points of users scheduled to be picked up by the respective ridesharing vehicle, traffic conditions of a route of the respective ridesharing vehicle, predicted passenger demand of the respective ridesharing vehicle, amount of fuel in the ridesharing vehicle, urgency level of the respective driver for being replaced and/or a desired drop-off location of the respective driver. 
     In some embodiments, adding the meeting point to driving route of the ridesharing vehicle causes a detour in the driving route and a delay of less than ten minutes, less than five minutes, less than three minutes, etc. 
     The meeting point can be determined such that each potential meeting point is considered and a meeting point that has the lowest cost per switching is chosen as the meeting point. The cost per switching can be a weighted sum that accounts for time to break, rider detours and/or ride estimated time of arrivals. 
     The method can also involve for each vehicle that needs to be switched (step  930 ), directing (e.g., via the ridesharing management server  150  as described above in  FIG.  1   ) the driver and the replacement driver to the meeting location. (Step  950 ). The driver and the replacement driver can be directed to the meeting point via the user devices via user interfaces, as described above. For example, one or more messages can be transmitted to each of the driver&#39;s user device and the replacement driver&#39;s user device alerting the driver and the replacement driver of the meeting location. 
       FIG.  10    is a diagram showing an example of a driver switch during a ridesharing service, according to some embodiments of the invention. A first driver  1000  of a ridesharing vehicle  1002  driving along route  1006  having a plurality of pick-up and drop-off locations  1020 , for example, to pick-up and drop off other riders. The ridesharing vehicle  1102  is transporting rider  1104 . A ridesharing management system (e.g., the ridesharing management system  150  as described above in  FIG.  1   ), determines that the first driver  1100  is to be switched. The ridesharing management system determines meeting location  1012 , along the route  1006  for the second driver  1008  to arrive to meet the first driver  1102  and the ridesharing vehicle  1000 . The second driver  1008  can be located at a fleet&#39;s headquarters  1010 . 
     In some scenarios, the ridesharing system can provide users with dynamic tolling. For example, a plurality of routes can be presented to the rider and/or driver, where each route has a different cost. The cost can vary based on an infrastructure of the route, characteristics and/or, environmental factors. The infrastructure of the route can include one or more infrastructure assets (e.g., a toll booth, city entrance toll, roads, and highway lanes, carpool lane) and/or have one or more characteristics (e.g., a high occupancy road, a low occupancy road, a road with high pollution, a road with high noise), that can effect a cost associated with a route. It can be desirable to dynamically adjust the cost associated with taking a particular route to, for example, implement a toll for taking a particular route. For example, a rider can be presented with two routes, a first route that takes the rider through the city center for a 10 minute ride and a second route that takes the rider around the city center for a 15 minute rider. For a municipality that desires to reduce pollution in the city center, a toll can be associated with the first route to cause the first route to be more costly than the second route. If the congestion is high at a the time the user requests the ride, the cost of selecting the first route can be even higher then it is when the congestion along the first route is low. In this manner, the cost for a particular route can dynamically change and may not necessarily be fixed. 
     In some embodiments, the cost of routes can be provided to a driver of a vehicle that is not driving a ridesharing vehicle, and is driving a personal vehicle. In these embodiments, the driver inputs a desired destination into a user device and one or more routes can be presented to the driver with a variety of cost options. 
       FIG.  11    is a flow diagram of a method  1100  for dynamic tolling for usage of a plurality of infrastructure assets, according to some embodiments of the invention. 
     The method involves receiving one or more requests to pass through at least one of the plurality of infrastructure assets (Step  1110 ). The one or more requests can be received from a rider of a rideshare vehicle, a driver of a rideshare vehicle and/or a driver of a non- rideshare vehicle (e.g., a person vehicle or a work vehicle). The one or more requests can include a start location and end location for the ride. The start location can be the pick-up location as described above. The start location can be a current location of the rider or driver. The start location can be user input. 
     The one or more requests can include a number of passengers on in the vehicle. 
     The plurality of infrastructure assets can be of a type of roads, city entrances, certain locations within cities or municipalities, specific highways, specific highway lanes, bridges, tunnels, and/or any predefined geographical location. 
     The method can also involve receive for each infrastructure asset of the plurality of infrastructure assets infrastructure specific inputs (Step  1120 ). The infrastructure assets inputs can include a type for the infrastructure asset and/or a real-time vehicle congestion within a geographical location surrounding the infrastructure asset. The infrastructure assets inputs can include a charge amount for use of particular infrastructure asset based on an input value. The input value can be set by a governmental entity. 
     The method can also involve determining for each of the or more requests for access to pass through a respective infrastructure asset, a toll amount associated with the respective one or more requests (Step  1130 ). The toll amount can be based on the particular infrastructure asset associated with respective request, the real-time vehicle congestion for the particular infrastructure asset associated with the respective request, type of the particular infrastructure asset associated with the respective request, vehicle type associated with the respective request and/or one or more potential routes for the vehicle associate with the respective request. The toll amount can be based on a distance of the one or more potential routes. The toll amount can be based on whether the end location is within or outside of a city center (e.g., whether an end location results in a driver parking the car within city bounds or outside of city bounds). 
     The toll amount can be based on the number of passengers in the vehicle. For example, the toll amount can be lessened for a vehicle with more passengers in a geographical location to encourage carpooling, or the toll amount can be increased in a geographical location to disincentivize too many tourists. 
     In some embodiments, the toll amount is based on a pollution parameter. The pollution parameter can indicate of an amount of pollution in a geographical location of an infrastructure asset. The pollution parameter can increase or decrease the toll amount. In some embodiments, the toll amount is based on a noise parameter. The noise parameter can indicate an amount of noise in geographical location of an infrastructure asset. In some embodiments, the toll amount is based on a weather parameter. For example, the toll amount can increase if its snowing. In some embodiments, the toll amount can be based on time of day, day of the week, historical data related to the infrastructure asset. In some embodiments, the toll amount is based on past price of roads. 
     In some embodiments, the toll amount can be based on a number of public transportation alternatives. In some embodiments, the toll amount can be based on vehicle type (e.g., electric vehicle, truck, smart car, or SUV). 
     In some embodiments, the geographical location surrounding the infrastructure asset is a neighborhood. In some embodiments, the geographical location surrounding the infrastructure asset is a predefined radial distance from the infrastructure asset. For example, if the infrastructure asset is a bridge, the predefined radial distance can be X meters in a radial distance from a center point on the bride. In some embodiments, the geographical location surrounding the infrastructure asset is a predefined area surrounding the infrastructure asset. For example, if the infrastructure asset is a road through a city center, the geographical location can be any location that is within  5  miles of any point on the road. 
     In various embodiments, any combination of the inputs/parameters described above with respect to  FIG.  11    can be used to determine the toll amount. In various embodiments, any combination of the inputs/parameters described above with respect to  FIG.  11    and/or one or more infrastructure assets can be input the basis for a label search Dijkstra that can include public transportation, roads for private car options to determine the dynamic tolling. 
     In some embodiments, a route can include a private leg portion, a parking portion, and a public transportation portion. In these embodiments, the label search Dijkstra can be used to determine potential switching points (e.g., parking places) and/or determining alternatives to determine a least expensive option, and/or options that balance out competing interests (e.g., cost, distance, parking costs/risks, and/or number of switches). 
     The method can also involve transmitting the toll amount to each respective vehicle associate with each of the respective one or more requests (Step  1140 ). In some embodiments, the toll amount expires after a duration. The duration can be set or dynamic based on the factors as described above. 
       FIG.  12    is a diagram showing several example toll amounts for vehicles driving from point A to point B, according to some embodiments of the invention. The first example is a request that is received at 8:00 AM for a regular private vehicle  1200 . The system determines that a toll amount of $5.75 to drive vehicle  1200  via the route identified in the request during the next hour. In some embodiments, the request may identify several route alternatives for driving vehicle  1200  from point A to point B, and the system may determine the price for each of the route alternatives. The second example is a request that is also received at 8:00 AM for an electric vehicle  1202 . The system determines a toll amount of $2.15 to drive vehicle  1202  via the route identified in the request during the next hour. In one embodiment, the system may take into consideration the level of air pollution when determining the price and determine a lower price for electric vehicles at times when the air pollution between point A and B is above a predetermined threshold. The third example is a request that is also received at 8:00 AM for a truck  1204 . The system determines a toll amount of $8.00 to drive truck  1204  via the route identified in the request during the next hour. In one embodiment, the system may take into consideration historic traffic pattens indicating that, at this time of day, traveling certain routes may have a negative effect on the traffic. The fourth example is a request that is also received at 8:00 AM for a scooter  1206 . The system determines a toll amount of $1.20 to drive scooter  906  via the route identified in the request during the next hour. In one embodiment, the system may take into consideration the public transportation alternatives available from point A to point B. For example, if traveling from point A and there are several public transportation alternatives, the price may be higher compared to other starting points without public transportation alternatives. The fifth example is a request received at 10:00 AM also for a regular private vehicle  908 . The system determines a toll amount of $2.55 to drive vehicle  1208  via the route identified in the request during the next three hours. The system may determine the time period for which the price is valid. For example, after rush hour, the price may be fixed for a longer period of time. 
     One skilled in the art will realize the invention can be embodied in other specific forms without departing from the spirit or essential characteristics thereof. The foregoing embodiments are therefore to be considered in all respects illustrative rather than limiting of the invention described herein. Scope of the invention is thus indicated by the appended claims, rather than by the foregoing description, and all changes that come within the meaning and range of equivalency of the claims are therefore intended to be embraced therein. 
     In the foregoing detailed description, numerous specific details are set forth in order to provide an understanding of the invention. However, it will be understood by those skilled in the art that the invention can be practiced without these specific details. In other instances, well-known methods, procedures, and components, modules, units and/or circuits have not been described in detail so as not to obscure the invention. Some features or elements described with respect to one embodiment can be combined with features or elements described with respect to other embodiments. 
     Although embodiments of the invention are not limited in this regard, discussions utilizing terms such as, for example, “processing,” “computing,” “calculating,” “determining,” “establishing”, “analyzing”, “checking”, or the like, can refer to operation(s) and/or process(es) of a computer, a computing platform, a computing system, or other electronic computing device, that manipulates and/or transforms data represented as physical (e.g., electronic) quantities within the computer&#39;s registers and/or memories into other data similarly represented as physical quantities within the computer&#39;s registers and/or memories or other information non-transitory storage medium that can store instructions to perform operations and/or processes. 
     Although embodiments of the invention are not limited in this regard, the terms “plurality” and “a plurality” as used herein can include, for example, “multiple” or “two or more”. The terms “plurality” or “a plurality” can be used throughout the specification to describe two or more components, devices, elements, units, parameters, or the like. The term set when used herein can include one or more items. Unless explicitly stated, the method embodiments described herein are not constrained to a particular order or sequence. Additionally, some of the described method embodiments or elements thereof can occur or be performed simultaneously, at the same point in time, or concurrently. 
     A computer program can be written in any form of programming language, including compiled and/or interpreted languages, and the computer program can be deployed in any form, including as a stand-alone program or as a subroutine, element, and/or other unit suitable for use in a computing environment. A computer program can be deployed to be executed on one computer or on multiple computers at one site. 
     Method steps can be performed by one or more programmable processors executing a computer program to perform functions of the invention by operating on input data and generating output. Method steps can also be performed by an apparatus and can be implemented as special purpose logic circuitry. The circuitry can, for example, be a FPGA (field programmable gate array) and/or an ASIC (application-specific integrated circuit). Modules, subroutines, and software agents can refer to portions of the computer program, the processor, the special circuitry, software, and/or hardware that implement that functionality. 
     Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor receives instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for executing instructions and one or more memory devices for storing instructions and data. Generally, a computer can be operatively coupled to receive data from and/or transfer data to one or more mass storage devices for storing data (e.g., magnetic, magneto-optical disks, or optical disks). 
     Data transmission and instructions can also occur over a communications network. Information carriers suitable for embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices. The information carriers can, for example, be EPROM, EEPROM, flash memory devices, magnetic disks, internal hard disks, removable disks, magneto-optical disks, CD-ROM, and/or DVD-ROM disks. The processor and the memory can be supplemented by, and/or incorporated in special purpose logic circuitry. 
     To provide for interaction with a user, the above described techniques can be implemented on a computer having a display device, a transmitting device, and/or a computing device. The display device can be, for example, a cathode ray tube (CRT) and/or a liquid crystal display (LCD) monitor. The interaction with a user can be, for example, a display of information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer (e.g., interact with a user interface element). Other kinds of devices can be used to provide for interaction with a user. Other devices can be, for example, feedback provided to the user in any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback). Input from the user can be, for example, received in any form, including acoustic, speech, and/or tactile input. 
     The computing device can include, for example, a computer, a computer with a browser device, a telephone, an IP phone, a mobile device (e.g., cellular phone, personal digital assistant (PDA) device, laptop computer, electronic mail device), and/or other communication devices. The computing device can be, for example, one or more computer servers. The computer servers can be, for example, part of a server farm. The browser device includes, for example, a computer (e.g., desktop computer, laptop computer, and tablet) with a World Wide Web browser (e.g., Microsoft® Internet Explorer® available from Microsoft Corporation, Chrome available from Google, Mozilla® Firefox available from Mozilla Corporation, Safari available from Apple). The mobile computing device includes, for example, a personal digital assistant (PDA). 
     Website and/or web pages can be provided, for example, through a network (e.g., Internet) using a web server. The web server can be, for example, a computer with a server module (e.g., Microsoft® Internet Information Services available from Microsoft Corporation, Apache Web Server available from Apache Software Foundation, Apache Tomcat Web Server available from Apache Software Foundation). 
     The storage module can be, for example, a random access memory (RAM) module, a read only memory (ROM) module, a computer hard drive, a memory card (e.g., universal serial bus (USB) flash drive, a secure digital (SD) flash card), a floppy disk, and/or any other data storage device. Information stored on a storage module can be maintained, for example, in a database (e.g., relational database system, flat database system) and/or any other logical information storage mechanism. 
     The above-described techniques can be implemented in a distributed computing system that includes a back-end component. The back-end component can, for example, be a data server, a middleware component, and/or an application server. The above described techniques can be implemented in a distributing computing system that includes a front-end component. The front-end component can, for example, be a client computer having a graphical user interface, a Web browser through which a user can interact with an example implementation, and/or other graphical user interfaces for a transmitting device. The components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (LAN), a wide area network (WAN), the Internet, wired networks, and/or wireless networks. 
     The system can include clients and servers. A client and a server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. 
     The above described networks can be implemented in a packet-based network, a circuit-based network, and/or a combination of a packet-based network and a circuit-based network. Packet-based networks can include, for example, the Internet, a carrier internet protocol (IP) network (e.g., local area network (LAN), wide area network (WAN), campus area network (CAN), metropolitan area network (MAN), home area network (HAN), a private IP network, an IP private branch exchange (IPBX), a wireless network (e.g., radio access network (RAN), 802.11 network, 802.16 network, general packet radio service (GPRS) network, HiperLAN), and/or other packet-based networks. Circuit-based networks can include, for example, the public switched telephone network (PSTN), a private branch exchange (PBX), a wireless network (e.g., RAN, Bluetooth®, code-division multiple access (CDMA) network, time division multiple access (TDMA) network, global system for mobile communications (GSM) network), and/or other circuit-based networks. 
     Some embodiments of the present invention may be embodied in the form of a system, a method or a computer program product. Similarly, some embodiments may be embodied as hardware, software or a combination of both. Some embodiments may be embodied as a computer program product saved on one or more non-transitory computer readable medium (or media) in the form of computer readable program code embodied thereon. Such non-transitory computer readable medium may include instructions that when executed cause a processor to execute method steps in accordance with embodiments. In some embodiments the instructions stores on the computer readable medium may be in the form of an installed application and in the form of an installation package. 
     Such instructions may be, for example, loaded by one or more processors and get executed. For example, the computer readable medium may be a non-transitory computer readable storage medium. A non-transitory computer readable storage medium may be, for example, an electronic, optical, magnetic, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any combination thereof. 
     Computer program code may be written in any suitable programming language. The program code may execute on a single computer system, or on a plurality of computer systems. 
     One skilled in the art will realize the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. The foregoing embodiments are therefore to be considered in all respects illustrative rather than limiting of the invention described herein. Scope of the invention is thus indicated by the appended claims, rather than by the foregoing description, and all changes that come within the meaning and range of equivalency of the claims are therefore intended to be embraced therein. 
     In the foregoing detailed description, numerous specific details are set forth in order to provide an understanding of the invention. However, it will be understood by those skilled in the art that the invention can be practiced without these specific details. In other instances, well-known methods, procedures, and components, modules, units and/or circuits have not been described in detail so as not to obscure the invention. Some features or elements described with respect to one embodiment can be combined with features or elements described with respect to other embodiments.