Exemple #1
0
                           inclusive_min=True, inclusive_max=False)
input_schema.set_data_type("gas", "Min Octane Rating", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=False)
input_schema.set_data_type("gas", "Max Lead Contents", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=True)
input_schema.set_data_type("oil", "Supply", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=True)
input_schema.set_data_type("oil", "Purchase Price", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=False)
input_schema.set_data_type("oil", "Octane Rating", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=False)
input_schema.set_data_type("oil", "Lead Contents", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=False)
# We tolerate float("inf") as the Maximum Production but not the Production Cost
input_schema.add_data_row_predicate("parameters",
                                    lambda row : not (row["Parameter"] == "Production Cost" and
                                                      row["Value"] == float("inf")))

input_schema.opl_prepend = "inp_" # avoid table name collisions
# ---------------------------------------------------------------------------------


# ------------------------ define the output schema -------------------------------
solution_schema = TicDatFactory(
    parameters = [["Parameter"],["Value"]],
    advertising = [["Gas"],["Dollars Spent"]],
    blending = [["Oil","Gas"],["Quantity"]])

solution_schema.opl_prepend = "sln_" # avoid table name collisions
# ---------------------------------------------------------------------------------
Exemple #2
0
input_schema.set_data_type("foods",
                           "Cost",
                           min=0,
                           max=float("inf"),
                           inclusive_min=True,
                           inclusive_max=False)
input_schema.set_data_type("nutrition_quantities",
                           "Quantity",
                           min=0,
                           max=float("inf"),
                           inclusive_min=True,
                           inclusive_max=False)

# We also want to insure that Max Nutrition doesn't fall below Min Nutrition
input_schema.add_data_row_predicate(
    "categories",
    predicate_name="Min Max Check",
    predicate=lambda row: row["Max Nutrition"] >= row["Min Nutrition"])

# The default-default of zero makes sense everywhere except for Max Nutrition
input_schema.set_default_value("categories", "Max Nutrition", float("inf"))
# ---------------------------------------------------------------------------------

# ------------------------ define the output schema -------------------------------
# There are three solution tables, with 3 primary key fields and 3 data fields.
solution_schema = TicDatFactory(parameters=[["Parameter"], ["Value"]],
                                buy_food=[["Food"], ["Quantity"]],
                                consume_nutrition=[["Category"], ["Quantity"]])
for (tbl, fld), tip in solution_schema_tooltips.items():
    solution_schema.set_tooltip(tbl, fld, tip)
# ---------------------------------------------------------------------------------
Exemple #3
0
                           inclusive_min=True, inclusive_max=False)

# input_schema.add_foreign_key("player_ratings", "roster", ["Name", "Name"])
# input_schema.add_foreign_key("player_ratings", "positions", ["Position Group", "Position Group"])
input_schema.set_data_type("player_ratings", "Rating", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=False)

# input_schema.add_foreign_key("position_constraints", "positions", ["Position Group", "Position Group"])
# input_schema.add_foreign_key("position_constraints", "innings", ["Inning Group", "Inning Group"])
# input_schema.add_foreign_key("position_constraints", "roster", ["Grade", "Grade"])
input_schema.set_data_type("position_constraints", "Min Players", min=0, max=float("inf"),
                           inclusive_min=True, inclusive_max=True)
input_schema.set_data_type("position_constraints", "Max Players", min=0, max=float("inf"),
                           inclusive_min=False, inclusive_max=True)
input_schema.add_data_row_predicate(
    "position_constraints", predicate_name="Position Min Max Check",
    predicate=lambda row : row["Max Players"] >= row["Min Players"])

solution_schema = TicDatFactory(
    lineup = [["Inning", "Position"],["Name"]],
    parameters = [["Key"],["Value"]])

def solve(dat):
    assert input_schema.good_tic_dat_object(dat)
    assert not input_schema.find_foreign_key_failures(dat)
    assert not input_schema.find_data_type_failures(dat)
    assert not input_schema.find_data_row_failures(dat)

    dat = input_schema.copy_to_ampl(dat, field_renamings={
            ("roster", "Grade"):"grade",
            ("positions", "Position Importance"): "position_importance",
Exemple #4
0
                           max=float("inf"),
                           inclusive_min=True,
                           inclusive_max=False)
input_schema.set_data_type("distances",
                           "Distance",
                           min=0,
                           max=float("inf"),
                           inclusive_min=True,
                           inclusive_max=False)
input_schema.add_foreign_key("distances", "cities", ['Source', 'Name'])
input_schema.add_foreign_key("distances", "cities", ['Destination', 'Name'])


# The distance matrix is bi-directionally safe. I.e. if the same source/dest and dest/source exist then the
# distances must match. If only one is present, it can fall back to the other in the code.
def _distance_matrix(dat):
    return {
        "distance_matrix":
        {k: v["Distance"]
         for k, v in dat.distances.items()}
    }


input_schema.add_data_row_predicate(
    "distances",
    predicate_name="Check Bi-Directionally Safe",
    predicate=lambda row, distance_matrix: (
        (row["Destination"], row["Source"]) not in distance_matrix) or
    (row["Distance"] == distance_matrix[row["Destination"], row["Source"]]),
    predicate_kwargs_maker=_distance_matrix)
Exemple #5
0
                           must_be_int=True)
input_schema.set_data_type(
    "roster_requirements",
    "Flex Status",
    number_allowed=False,
    strings_allowed=["Flex Eligible", "Flex Ineligible"])
input_schema.set_data_type("my_draft_positions",
                           "Draft Position",
                           min=0,
                           max=float("inf"),
                           inclusive_min=False,
                           inclusive_max=False,
                           must_be_int=True)

input_schema.add_data_row_predicate(
    "roster_requirements",
    predicate=lambda row: row["Max Num Starters"] >= row["Min Num Starters"])
input_schema.add_data_row_predicate(
    "roster_requirements",
    predicate=lambda row: row["Max Num Reserve"] >= row["Min Num Reserve"])
# ---------------------------------------------------------------------------------

# ------------------------ define the output schema -------------------------------
solution_schema = TicDatFactory(parameters=[["Parameter"], ["Value"]],
                                my_draft=[['Player Name'],
                                          [
                                              'Draft Position', 'Position',
                                              'Planned Or Actual',
                                              'Starter Or Reserve'
                                          ]])
Exemple #6
0
            return 0 < value < float("inf")
        except:
            return False
    if key == "Amount Leftover Constraint":
        return value in ["Equality", "Upper Bound"]


assert all(
    _good_parameter_key_value(k, v) for k, v in default_parameters.items())

input_schema.set_data_type("parameters",
                           "Key",
                           number_allowed=False,
                           strings_allowed=default_parameters)
input_schema.add_data_row_predicate(
    "parameters",
    predicate_name="Good Parameter Value for Key",
    predicate=lambda row: _good_parameter_key_value(row["Key"], row["Value"]))
# ---------------------------------------------------------------------------------

# ------------------------ define the output schema -------------------------------
solution_schema = TicDatFactory(
    load_amount_details=[[
        "Number One Way Trips", "Amount Leftover", "Load Amount"
    ], ["Number Of Visits"]],
    load_amount_summary=[["Number One Way Trips", "Amount Leftover"],
                         ["Number Of Visits"]])

# ---------------------------------------------------------------------------------


# ------------------------ create a solve function --------------------------------
Exemple #7
0
input_schema.set_data_type("roster",
                           "Min Innings Played",
                           min=0,
                           max=9,
                           inclusive_min=True,
                           inclusive_max=True)
input_schema.set_data_type("roster",
                           "Max Innings Played",
                           min=0,
                           max=9,
                           inclusive_min=False,
                           inclusive_max=True)
input_schema.add_data_row_predicate(
    "roster",
    predicate_name="Roster Min Max Check",
    predicate=lambda row: row["Max Innings Played"] >= row["Min Innings Played"
                                                           ])
input_schema.add_foreign_key("roster", "innings", ["Arrival Inning", "Inning"])
input_schema.add_foreign_key("roster", "innings",
                             ["Departure Inning", "Inning"])

input_schema.set_data_type("positions",
                           "Position Importance",
                           min=0,
                           max=float("inf"),
                           inclusive_min=True,
                           inclusive_max=False)
input_schema.set_data_type("positions",
                           "Consecutive Innings Only",
                           strings_allowed=['True', 'False'],