If you are using max and it is a discrete programming problem then try all of the possible input combinations and pick the best results.
If trying all of the possible inputs is not feasible (for example too slow above 2^40 possibilities) then ga()
fmincon cannot be used for discrete variables. intlinprog cannot be used when max() appears in the formula or constraints.
Sometimes instead of using max it can be feasible to run several slightly different problems, each assuming that one of the possibilities is the max, and then to take the result in which the max was true.