One generalization is convex programming, so linear functions are special case of convex functions and if you want to minimize the convex function or equivalently maximize a concave function subject to convex constraints that again is a problem you can solve efficiently both in theory in terms of polynomial time and in practice. 