Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gustavobittencourt/2bd7e1c4ad35e4b41c70c7e9267d7d04 to your computer and use it in GitHub Desktop.
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.
\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