I gave an example of applying ILP to a river-crossing problem which, like chess, is a series of consecutive states, here. The first thing you'll notice is that, to solve a simple combinatorial problem, I created a 90-line model. The corresponding model I wrote for a 20-man river crossing problem was 1, 500 lines long. Representing chess would require an absolutely huge model.
That's the easy part of the problem!!!
The medium part of the problem is getting the model to converge to a good optimum. The chess tree is full of symmetries, which would have to be broken. There's a paper on breaking ILP symmetries here. Getting large ILP models to converge is often difficult anyway. There are various methods available - the cutting-plane method, branch and bound, branch and cut, and delayed column generation for example - it would, of course, be a case of finding out what combination of known methods works best for a chess tree.
The hard part of the problem is that before getting started at all, it will be necessary to take an ILP solver, and rewrite it to allow not one objective function (the expression that linear programming tries to optimise), but two. I can see no mathematical reason why this should be a show-stopper - but it will be necessary because of the existence of an opponent - whose "objective function" will be approximately the opposite of what our side's will be. As an example, our objective function might be:
* maximise white king safety
* minimise black king safety
* maximise white piece mobility
* minimise black piece mobility
* maximise white piece value
* minimise black piece value
To get the opponent's objective function, simply take the above objective function and reverse each term!
If I were to use the above objective function for white, and somehow got the model to converge in a solver to a good solution over, say, 5 moves, the solution would simply consist of 5 "good" white moves and 5 obviously bad black moves. What is actually required, though, is to find the "best line" - a sequence of moves optimised for both the black and the white pieces. One way might be to take an open-source ILP program and make a fork of it that can take two objective functions - one to be applied to half the expressions in the model and the other to be applied to the other half. Doing this will take both programming and mathematical know-how.
A big job then.

The reward, though, will be a chess program that can see much more deeply into the chess tree than anyone today would imagine to be possible.
