# Market input and output

To read in an instance of the same-costs problem, use `SameCostsMarket(f, t, h)`

:

```
using OptimalApplication
mkt = SameCostsMarket(
[0.5, 0.1, 0.9, 0.7], # admissions probabilities
[12, 20, 1, 3], # utility values
2 # limit on number of schools to apply to
)
```

`SameCostsMarket{Int64}(4, [0.9, 0.7, 0.5, 0.1], [1, 3, 12, 20], 2, [3, 4, 1, 2])`

The output is an instance of `SameCostsMarket{U}`

, which contains the input data. Here `U == eltype(t)`

and we require `U <: Real`

.

To improve the performance of the solvers, the schools are sorted in ascending order by `t`

when the market is constructed. Therefore, `mkt = SameCostsMarket(f, t, h); mkt.t == t`

is *not* necessarily true. The input data can be recovered using `mkt.t == t[mkt.perm]`

; see `SameCostsMarket(f, t, h)`

.

To read in an instance of the varied-costs problem, use `VariedCostsMarket(f, t, g, H)`

:

```
mkt = VariedCostsMarket(
[0.5, 0.1, 0.9, 0.7], # admissions probabilities
[12, 20, 1, 3], # utility values
[3, 4, 7, 2], # application fees
8 # budget to spend on applications
)
```

`VariedCostsMarket(4, [0.9, 0.7, 0.5, 0.1], [1, 3, 12, 20], [7, 2, 3, 4], 8, [3, 4, 1, 2])`

The output is an instance of `VariedCostsMarket`

. Both `SameCostsMarket`

and `VariedCostsMarket`

are subtypes of the abstract type `Market`

.

`VariedCostsMarket`

supports only `t`

with integer eltype. Because the objective function is linear in `t`

, to work with float data, first multiply by the least common denominator.

If the application fees share a common divisor, the solvers will perform more effectively if you divide by it. For example, fees of `[90, 80, 90, 70]`

with budget `160`

is equivalent to fees of `[9, 8, 9, 7]`

with budget `16`

.

OptimalApplication also provides the convenience functions `Market(f, t, h)`

and `Market(f, t, g, H)`

, which behave just like those above.