To solve this optimization problem, we first need to identify the decision variables, constraints, and the objective function. The decision variables are the number of chocolate donuts (let's call this \(x\)) and the number of maple donuts (let's call this \(y\)). 

The constraints based on the problem description are:
1. \(x \geq 50\) (at least 50 chocolate donuts)
2. \(y \geq 75\) (at least 75 maple donuts)
3. \(x \leq 100\) (at most 100 chocolate donuts)
4. \(y \leq 150\) (at most 150 maple donuts)
5. \(x + y \geq 200\) (total of at least 200 donuts)

The objective function, which we want to maximize, is the total profit: \(2x + 3y\).

We will use Gurobi, a popular optimization solver, to find the values of \(x\) and \(y\) that maximize the profit while satisfying all the constraints.

```python
from gurobipy import *

# Create a new model
m = Model("Bakery_Optimization")

# Decision variables
x = m.addVar(lb=50, ub=100, name="Chocolate_Donuts")  # At least 50, at most 100 chocolate donuts
y = m.addVar(lb=75, ub=150, name="Maple_Donuts")      # At least 75, at most 150 maple donuts

# Objective function: Maximize profit
m.setObjective(2*x + 3*y, GRB.MAXIMIZE)

# Additional constraint for total donuts
m.addConstr(x + y >= 200, name="Total_Donuts")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of Chocolate Donuts: {x.x}")
    print(f"Number of Maple Donuts: {y.x}")
    print(f"Total Profit: {m.objVal}")
else:
    print("No optimal solution found. The model is likely infeasible.")

```