# Logical Design

## In this example, you’ll learn how to solve a logical design problem, which involves constructing a circuit using the minimum number of NOR gates (devices with two inputs and  one output) that will perform the logical function specified by a truth table. We’ll show you how to formulate this problem as a binary optimization problem using the Gurobi Python API and then use Gurobi Optimizer to automatically find the optimal solution.

This model is example 12 from the fifth edition of Model Building in Mathematical Programming by H. Paul Williams on pages 266-267 and 320-321.

This example is at the intermediate level, where we assume that you know Python and the Gurobi Python API and that you have some knowledge of building mathematical optimization models.

#### Access the Jupyter Notebook Modeling Example

Click on the link below to access the example in Google Colab, which is a free, online Jupyter Notebook environment that allows you to write and execute Python code through your browser.

Logical Design

#### How to Run the Jupyter Notebook Modeling Example

-To run the example the first time, choose “Runtime” and then click “Run all”.

-All the cells in the Jupyter Notebook will be executed.

-The example will install the gurobipy package, which includes a limited Gurobi license that allows you to solve small models.

-You can also modify and re-run individual cells.

-For subsequent runs, choose “Runtime” and click “on “Restart and run all”.

-The Gurobi Optimizer will find the optimal solution of the modeling example.

Check out the Colab Getting Started Guide for full details on how to use Colab Notebooks as well as create your own.