To solve the vine farmer's problem, we first need to translate the given conditions into a mathematical representation that can be used in linear programming. Let's denote:

- \(R\) as the number of acres for growing red grapes,
- \(G\) as the number of acres for growing green grapes.

The objective is to maximize profit, with the profit per acre being $300 for red grapes and $250 for green grapes. Thus, the objective function can be written as:

\[ \text{Maximize:} \quad 300R + 250G \]

Given constraints are:
1. The farmer has 100 acres of land in total:
\[ R + G \leq 100 \]
2. He must grow at least 30 acres of red grapes:
\[ R \geq 30 \]
3. He must grow at least 25 acres of green grapes:
\[ G \geq 25 \]
4. He prefers to grow more green grapes than red grapes, but can grow at most twice the amount of green grapes as red grapes:
\[ G \leq 2R \]

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

```python
from gurobipy import *

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

# Define variables
R = m.addVar(name="Red_Grapes", lb=30)  # Acres for red grapes, minimum 30 acres
G = m.addVar(name="Green_Grapes", lb=25)  # Acres for green grapes, minimum 25 acres

# Set the objective function: Maximize profit
m.setObjective(300*R + 250*G, GRB.MAXIMIZE)

# Add constraints
m.addConstr(R + G <= 100, name="Total_Land")  # Total land constraint
m.addConstr(G <= 2*R, name="Green_vs_Red")  # Green grapes at most twice the red

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found: {R.varName} = {R.x}, {G.varName} = {G.x}")
    print(f"Maximum Profit: ${300*R.x + 250*G.x}")
else:
    print("No optimal solution found")
```