base_model: mtz model for the atsp, prepared for two objectives
    Loads two additional variables/constraints to the mtz model:
        - C: sum of travel costs
        - T: sum of travel times
    Parameters:
        - n: number of cities
        - c,t: alternative edge weights, to compute two objective functions
    Returns list of candidate solutions

def base_model(n,c,t):
    """base_model: mtz model for the atsp, prepared for two objectives
    Loads two additional variables/constraints to the mtz model:
        - C: sum of travel costs
        - T: sum of travel times
    Parameters:
        - n: number of cities
        - c,t: alternative edge weights, to compute two objective functions
    Returns list of candidate solutions
    """
    from atsp import mtz_strong
    model = mtz_strong(n,c)     # model for minimizing cost
    x,u = model.data

    # some auxiliary information
    C = model.addVar(vtype="C", name="C")       # for computing solution cost
    T = model.addVar(vtype="C", name="T")       # for computing solution time

    model.addCons(T == quicksum(t[i,j]*x[i,j] for (i,j) in x), "Time")
    model.addCons(C == quicksum(c[i,j]*x[i,j] for (i,j) in x), "Cost")

    model.data = x,u,C,T
    return model