def new_controller_Vw(simulation, delta_beta=0.54, gamma=0.95, capacity=4):
    """
    Implementation of the policy resulting from the basis approximation of the value function.

    :param simulation: LatticeForest simulator object.
    :param delta_beta: control effectiveness parameter in the Tree dynamics.
    :param gamma: discount factor.
    :param capacity: maximum amount of control effort allowed per time step.

    :return: dictionary describing the action. keys are the positions of Trees and values are (delta_alpha, delta_beta)
    indicating the control effort.
    """

    # weights are stored here as they can be computed offline and used online
    weights = [-24.6317755, 5.18974134, -1.37294744]
    action = []

    # priority for control of fires is based on the how easily fire can spread in the future
    for fire in simulation.fires:
        element = simulation.group[fire]

        value = -weights[2]*delta_beta*gamma

        neighbor_sum = 0
        for n in element.neighbors:
            neighbor = simulation.group[n]
            if neighbor.is_healthy(neighbor.state):
                neighbor.query_neighbors(simulation.group)
                fj = neighbor.neighbors_states.count(True)
                neighbor_sum += neighbor.dynamics((neighbor.healthy, fj, neighbor.healthy))

        value *= neighbor_sum

        action.append((value, fire))

    # sort by priority and apply capacity constraint
    action = sorted(action, key=lambda x: x[0], reverse=True)[:capacity]
    action = [x[1] for x in action]
    action = {x: (0, delta_beta) if x in action else (0, 0) for x in simulation.group.keys()}

    return action