-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptdefi.sty
More file actions
90 lines (83 loc) · 1.97 KB
/
optdefi.sty
File metadata and controls
90 lines (83 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
% Developed by Parin Chaipunya, KMUTT.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{optproblem}[2025/06/11 optimization problem definition]
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{empheq}
\RequirePackage{eqparbox}
\RequirePackage{environ}
% \newcommand*{\centermathcell}[1]{\omit\hfill$\displaystyle#1$\hfill\ignorespaces}
% \newcommand{\centermathcell}[1]{\eqmakebox[op][c]{#1}}
\newcounter{OptEnv}
\newcounter{ConsNum}
% Environment for optimization problem
\NewEnviron{optim}{%
\stepcounter{OptEnv}
\setcounter{ConsNum}{0}
\begin{empheq}[left=\empheqlbrace\;]{alignat=2}
\BODY
\end{empheq}
% \addtocounter{OptEnv}{1}
}
\NewEnviron{optim*}{%
\stepcounter{OptEnv}
\setcounter{ConsNum}{0}
\begin{empheq}[left=\empheqlbrace\;]{alignat*=2}
\BODY
\end{empheq}
% \addtocounter{OptEnv}{1}
}
\NewEnviron{optimunc}{%
\begin{align}
\BODY
\end{align}
}
\NewEnviron{optimunc*}{%
\begin{align*}
\BODY
\end{align*}
}
% Some commands
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\minormax}{\min \big/ \max}
\newcommand{\subjto}{\small\text{s.t.}}
\newcommand{\Subjto}{\\ \eqmakebox[OE\arabic{OptEnv}][c]{$\subjto$} \quad }
\newcommand{\chk}{\ifnum\value{ConsNum}>0 \\ \else \Subjto \fi}
% \setObj{sense}{var}{Obj}
\newcommand{\setObj}[3]{%
\eqmakebox[OE\arabic{OptEnv}][c]{$\displaystyle #1_{#2}$} \quad & #3 %
% \\
% \subjto \quad
}
\newcommand{\addCons}[1]{%
\chk
& {#1}
\addtocounter{ConsNum}{1}
}
\newcommand{\addEqCons}[2]{%
\chk
& {#1} = {#2}
\addtocounter{ConsNum}{1}
}
\newcommand{\addIneqCons}[2]{%
\chk
& {#1} \leq {#2}
\addtocounter{ConsNum}{1}
}
\newcommand{\addLbCons}[2]{%
\chk
& {#1} \geq {#2}
\addtocounter{ConsNum}{1}
}
% \addBddCons{x}{a}{b} -> a \leq x \leq b
\newcommand{\addBddCons}[3]{%
\chk
& {#2} \leq {#1} \leq {#3}
\addtocounter{ConsNum}{1}
}
\newcommand{\addInclCons}[2]{%
\chk
& {#1} \in {#2}
\addtocounter{ConsNum}{1}
}