Last active
September 19, 2016 05:11
-
-
Save gustavobittencourt/2bd7e1c4ad35e4b41c70c7e9267d7d04 to your computer and use it in GitHub Desktop.
LaTeX - Modelo de Programação Matemática (Completo): Template completo para Modelos de Programação Matemática (Programação Linear, Programação Inteira) no LaTeX.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\documentclass[a4paper,11pt]{article} | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
%% PACOTES E CONFIGURAÇÕES %% | |
%% Gustavo Bittencourt %% | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
% ================================ CONFIGURAÇÕES =============================== % | |
% Alterna entre a versão comentada e a versão final. | |
\def \versao{Rascunho} | |
% Gerar ou não o índice de nomenclatura | |
\def \executarmakeindex{Sim} | |
% Coloca as 4 margens com 1" de tamanho (opcional [cm] = 1,5 cm) | |
\usepackage{fullpage} | |
% --- Identar a primeira linha do parágrafo --- % | |
\usepackage{indentfirst} | |
% =================================== PACOTES ================================== % | |
% --- Comentários no PDF --- % | |
\usepackage[author={Gustavo Bittencourt}]{pdfcomment} | |
\usepackage{xcolor} | |
% --- Modelos Matemáticos (IEEtrantools) --- % | |
\usepackage{IEEEtrantools} | |
\usepackage{amsmath,amssymb} | |
\usepackage{empheq} | |
% --- Nomenclatura --- % | |
\usepackage{nomencl} | |
\usepackage{ifthen} | |
% --- Bibliografia --- % | |
% \usepackage{natbib} | |
% \setlength{\bibsep}{1pt} % Diminui o espaço entre referências | |
% --- Listas e enumeradores --- % | |
% \usepackage{enumitem} | |
% --- Figuras --- % | |
% Legendas para Subfiguras | |
% \usepackage[font+=footnotesize]{subcaption} | |
% --- Gráficos --- % | |
% Gráficos Boxplot | |
% \usepackage{pgfplots} | |
% \pgfplotsset{compat=1.8} | |
% \usepgfplotslibrary{statistics} | |
% --- Tabelas --- % | |
\usepackage{multirow} | |
\usepackage{booktabs} % \toprule, \midrule, \bottomrule | |
% --- Pacotes de caracteres UTF-8 e Babel --- % | |
\usepackage[utf8]{inputenc} | |
\usepackage[T1]{fontenc} | |
\usepackage[brazil]{babel} % Língua padrão: Inglês | |
% \usepackage{lmodern} % Fonte Padrão: Times New Roman (txfonts) | |
% Fontes (Texto e matemática estilo Times New Roman) | |
% \usepackage{newtxmath} | |
% \usepackage{amsfonts} | |
% =========================== COMANDOS PERSONALIZADOS ========================== % | |
% ------------------------ Configurações dos Comentários ------------------------- % | |
% \comando{texto}{comentario} | |
% ex: \duvida{texto de vermelho}{comentario do balão} | |
\def \final{Final} | |
\ifx \versao\final | |
% Se a versão do documento é a versão a ser submetida (Final) | |
\newcommand{\duvida}[2]{#1} | |
\newcommand{\info}[1]{} | |
\else | |
% Caso contrário, exibe os comentários | |
\newcommand{\duvida}[2]{\pdfmarkupcomment[markup=Highlight, color=red!80]{#1} | |
~\pdfcomment[color=red!80, icon=Help, subject=Duvida]{#2}~~~~} | |
%\newcommand{\duvida}[2]{\pdfmarkupcomment[markup=Highlight, color=red!75]{#1} | |
%~\pdfmargincomment[color=red!75, icon=Help, subject=Duvida]{#2}} | |
\newcommand{\info}[1]{\pdfcomment[color={1.0 0.93 0.49}, icon=Key, subject=Info]{#1}} | |
\fi | |
% ---------------------- Modelos Matemáticos - IEEEeqnarray ---------------------- % | |
% Definir a Tag para o pacote IEEEeqnarray | |
% Referenciar alguma equação já apresentada em um modelo anterior | |
% ex: \ztag{\ref{eq:DI-Simp-NãoNegatividade}a} | |
\makeatletter | |
\newcommand\ztag[1]{% | |
\def\@currentlabel{#1}% | |
\gdef\tmp{% | |
\addtocounter{equation}{-1}% | |
\def\theequation{#1}}% | |
\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup | |
\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup | |
\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup | |
\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup | |
\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup\aftergroup | |
\aftergroup | |
\tmp} | |
\makeatother | |
% Distância entre equações no IEEEeqnarray | |
\renewcommand*{\IEEEeqnarraydecl}{% | |
\setlength{\jot}{2\IEEEnormaljot}% twice the normal value of \jot | |
} | |
% Colunas do IEEEeqarray | |
\IEEEeqnarraydefcol{A}{\hspace{-4cm}\hfil$\IEEEeqnarraymathstyle}{$} | |
\IEEEeqnarraydefcol{B}{\hspace{1cm}\hfil$\IEEEeqnarraymathstyle}{$} | |
% --------------------------------- Nomenclatura --------------------------------- % | |
% Define "Nomenclature" como uma subseção. | |
%\renewcommand{\nomname}{\subsection{Nomenclature}} | |
\renewcommand{\nomname}{} | |
% Separação entre os ítens da nomenclatura | |
\setlength{\nomitemsep}{-\parsep+0.3em} | |
% Centraliza os labels de nomenclatura | |
\renewcommand{\nomlabel}[1]{\phantom{\qquad}\hfil#1\hfil} | |
% Define e formata cada uma das subcategorias de símbolos e termos citados | |
% OBS: Não são aceitos caracteres UTF-8. Logo, "Índices" deve ser escrito como \'Indices | |
\newcommand{\nomtexto}[1]{\item[\small\textbf{#1}\hfill]} | |
\renewcommand{\nomgroup}[1]{% | |
\ifthenelse{\equal{#1}{I}}{\nomtexto{\'Indices e Conjuntos}}{% | |
\ifthenelse{\equal{#1}{P}}{\smallskip\nomtexto{Par\^ametros}}{ | |
\ifthenelse{\equal{#1}{V}}{\smallskip\nomtexto{Vari\'aveis}}{}}}} | |
% -- Gerar Nomenclatura em duas colunas -- % | |
\usepackage{multicol} | |
\makeatletter | |
\@ifundefined{chapter} | |
{\def\wilh@nomsection{section}} | |
{\def\wilh@nomsection{chapter}} | |
\def\thenomenclature{% | |
\begin{multicols}{2}[% | |
\csname\wilh@nomsection\endcsname*{\nomname} | |
\if@intoc\addcontentsline{toc}{\wilh@nomsection}{\nomname}\fi | |
\nompreamble] | |
\list{}{% | |
\labelwidth\nom@tempdim | |
\leftmargin\labelwidth | |
\advance\leftmargin\labelsep | |
\itemsep\nomitemsep | |
\let\makelabel\nomlabel}% | |
} | |
\def\endthenomenclature{% | |
\endlist | |
\end{multicols} | |
\nompostamble} | |
\makeatother | |
% Executar o comando \write18, para executar o Makeindex dentro do LaTeX | |
% OBS: o comando \write18 exige que o modo shell escape esteja habilitado, o que | |
% permite que comandos externos sejam executados no latex. Além disso, o comando para | |
% compilação a seguir deve ser executado duas vezes, a fim de gerar o index: | |
% pdflatex -shell-escape -interaction=nonstopmode -synctex=1 arquivo.tex | |
\ifthenelse{\equal{\executarmakeindex}{Sim}} | |
{\immediate\write18{makeindex \jobname.nlo -s nomencl.ist -o \jobname.nls}}{} | |
% Gerar a nomenclatura (Após o MakeIndex, caso ele seja executado novamente) | |
\makenomenclature | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
% TEXTO % | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
\title{Template - Modelo de Programação Matemática} | |
\author{Gustavo~Cunha~de~Bittencourt} | |
\begin{document} | |
\maketitle | |
% --- Seção de Nomenclatura --- % | |
\section*{Nomenclatura} | |
\label{Nomenclatura} | |
\vspace{-1.5cm} %A nomenclatura sempre começa deslocada para baixo, então é preciso corrigir | |
\printnomenclature[2 cm] | |
\section*{Formulação} | |
\vspace{-0.65cm} %A IEEEeqnarray também começa sempre deslocada para baixo | |
{\allowdisplaybreaks \begin{IEEEeqnarray}{-l"L+A*B*} | |
% --- Função Objetivo --- % | |
\text{Minimizar} & \IEEEeqnarraymulticol{2}{l} | |
{\sum_{j \in J} f_j w_j + \sum_{k \in K} g_k z_k + \mathbb{E}[Q(w, z, y, \xi)]} | |
&\label{eq:PE-FO} | |
\nomenclature[Iaa]{$j \in J$}{Índice e conjunto dos potenciais fornecedores a serem | |
utilizados} | |
\nomenclature[Iaa]{$k \in K$}{Índice e conjunto dos potenciais armazéns a serem abertos} | |
\nomenclature[Iaa]{$l \in L$}{Índice e conjunto de clientes} | |
\nomenclature[Iab]{$\xi \in \Omega$}{Índice e conjunto de cenários} | |
\nomenclature[Paa]{$f_j$}{Custo fixo de operação de um fornecedor na | |
localidade $j$} | |
\nomenclature[Vaa]{$w_j$}{Escolha de fornecedores: $1$ se o fornecedor $j$ for | |
utilizado, $0$ caso contrário} | |
\nomenclature[Paa]{$g_k$}{Custo fixo de abertura e operação de um armazém na | |
localidade $k$} | |
\nomenclature[Vaa]{$z_k$}{Abertura de facilidades: $1$ se o armazém $k$ for aberto, $0$ | |
caso contrário} | |
\nomenclature[Vab]{$y_{kl}$}{Alocação de clientes: $1$ se o cliente $l$ é alocado ao | |
armazém $k$, $0$ caso contrário} \\ | |
% --- Alocação de Clientes a Depósitos --- % | |
\text{Sujeito a} & \sum_{k \in K} y_{kl} = 1 & \forall l \in L | |
&\label{eq:PE-AlocaçãoClientesDepósitos} | |
\\ | |
% --- Cobertura --- % | |
& y_{kl} \leq z_k & \forall k \in K, \forall l \in L | |
&\label{eq:PE-Cobertura} | |
\\ | |
% --- Integralidade do W e do Z --- % | |
& w_j, z_k \in \left\lbrace 0, 1 \right\rbrace & \forall j \in J, \forall k \in K | |
&\label{eq:PE-IntegralidadeZW} | |
\\ | |
% --- Integralidade do Y --- % | |
& y_{kl} \in \left\lbrace 0, 1 \right\rbrace & \forall k \in K, \forall l \in L | |
&\label{eq:PE-IntegralidadeY} | |
\end{IEEEeqnarray}} | |
A função objetivo do modelo de primeiro estágio (\ref{eq:PE-FO}) minimiza a soma dos custos | |
fixos de operação dos fornecedores, de abertura e operação dos armazéns, e o valor esperado do | |
custo do problema de segundo estágio em função dos fornecedores e armazéns escolhidos ($w_j$ e | |
$z_k$), da alocação de clientes a armazéns ($y_{kl}$) e de cada um dos cenários $\xi \in | |
\Omega$. | |
A restrição (\ref{eq:PE-AlocaçãoClientesDepósitos}) determina a alocação de cada cliente | |
a um único depósito (variável $y_{kl}$ binária), impedindo o \textsl{cross-filling}; e a (\ref | |
{eq:PE-Cobertura}) impõe que clientes só podem ser alocados a depósitos que foram abertos. As | |
restrições (\ref{eq:PE-IntegralidadeZW}) e (\ref{eq:PE-IntegralidadeY}) definem a integralidade | |
das variáveis $w_j$, $z_k$ e $y_{kl}$. | |
\end{document} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment