# Algorithm for (binary) integer programming

I am looking for an algorithm that can solve the following (binary) integer programming problem. The problem description is given below: \begin{align*} &\max\sum_{i\in I}\sum_{j\in J}g_{ij}w_{ij} \\ &\forall i \in I, \sum_{j\in J}g_{ij}\leqslant 1 \\ & \forall j \in J, \sum_{i\in I}g_{ij}\leqslant 2 \\ & \forall j \in J,\sum_{i\in I}g_{ij}w_{ij}\leqslant x_j, \end{align*} where $$\forall i\in I, j\in J,g_{ij}\in\{0,1\}; w_{ij}\in \mathbb{R_+};x_j\in\mathbb{R_+}.$$ $$g_{ij}$$ is decision variable, $$w_{ij}$$s and $$x_{ij}$$s are given such that $$\forall j \in J, w_{ij}\leqslant x_j.$$ Index sets $$I$$ and $$J$$ are finite.

I might note that the constraints $$\sum_{j} g_{ij} \le 1$$ mean that $$\{g_{ij}: j \in J\}$$ is in Cplex terminology a "SOS Type 1", and Cplex can take advantage of that to improve efficiency.