Fog computing was proposed to bridge the gap between the cloud computing capabilities and the new requirements introduced by 5G and IoT applications. Assigning clients' requests to fog nodes for processing while meeting the quality of service requirements is still a challenge. In this thesis, we propose two mathematical models for the task assignment problem in fog networks. The main objective of both models is to maximize the fog service provider's profit while satisfying the service level agreement requirements of the offloaded tasks. In addition, each model addresses multiple requirements to satisfy various service provider's needs. The first model addresses green computing requirements through an energy efficient fog nodes operation. The second model addresses load balancing requirements by minimizing the difference between the node's utilization across the fog network. Since these models provide optimal solutions, they can be useful with historical data and for benchmarking various real-time algorithms.