To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of acres of oak trees as \(O\) and the number of acres of elm trees as \(E\).

The objective is to maximize profit, given that the profit per acre of oak trees is $1000 and the profit per acre of elm trees is $1200. Therefore, the objective function can be written as:
\[ \text{Maximize:} \quad 1000O + 1200E \]

There are several constraints based on the problem description:
1. The total land used for both types of trees cannot exceed 300 acres:
\[ O + E \leq 300 \]
2. At least 50 acres must be dedicated to oak trees:
\[ O \geq 50 \]
3. At least 70 acres must be dedicated to elm trees:
\[ E \geq 70 \]
4. The amount of land used for elm trees cannot exceed twice the amount used for oak trees:
\[ E \leq 2O \]

Given these constraints and the objective function, we can formulate this problem as a linear programming problem.

Here's how we can implement this using Gurobi in Python:

```python
from gurobipy import *

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

# Define the decision variables
O = m.addVar(name='oak', lb=50)  # At least 50 acres of oak trees
E = m.addVar(name='elm', lb=70)  # At least 70 acres of elm trees

# Define the objective function: Maximize profit
m.setObjective(1000*O + 1200*E, GRB.MAXIMIZE)

# Add constraints
m.addConstr(O + E <= 300, name='total_land')  # Total land constraint
m.addConstr(E <= 2*O, name='elm_to_oak_ratio')  # Elm to oak ratio constraint

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found:")
    print(f"Oak trees: {O.x} acres")
    print(f"Elm trees: {E.x} acres")
    print(f"Maximum profit: ${1000*O.x + 1200*E.x}")
else:
    print("No optimal solution found.")
```