To solve this optimization problem, we will use linear programming. The goal is to maximize profit given the constraints on production capacity and roasting machine availability.

Let's denote:
- \(x_c\) as the number of tons of cocoa beans produced per day.
- \(x_{cf}\) as the number of tons of coffee beans produced per day.

The objective function to maximize profit is:
\[ \text{Maximize} \quad 500x_c + 750x_{cf} \]

Given constraints are:
1. Production capacity constraint: The factory can produce a maximum of 15 tons per day in total.
\[ x_c + x_{cf} \leq 15 \]
2. Roasting machine availability constraint: Each ton requires 15 hours of roasting, and the roasting machine is available for at most 1000 hours.
\[ 15x_c + 15x_{cf} \leq 1000 \]
3. Minimum production requirements:
\[ x_c \geq 3 \]
\[ x_{cf} \geq 5 \]

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

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

# Define variables
x_c = m.addVar(name="cocoa_beans", lb=3)  # Minimum of 3 tons of cocoa beans
x_cf = m.addVar(name="coffee_beans", lb=5)  # Minimum of 5 tons of coffee beans

# Objective function: Maximize profit
m.setObjective(500*x_c + 750*x_cf, GRB.MAXIMIZE)

# Constraints
# Production capacity constraint
m.addConstr(x_c + x_cf <= 15, name="production_capacity")

# Roasting machine availability constraint
m.addConstr(15*x_c + 15*x_cf <= 1000, name="roasting_machine_availability")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Cocoa beans to produce: {x_c.x}")
    print(f"Coffee beans to produce: {x_cf.x}")
else:
    print("No optimal solution found. The model is likely infeasible.")

```