Transladate problem from Octave to R
Sebastián Kruk Gencarelli <[email protected]> Tue, 2 Aug 2022 15:18:04 +0000
| Newsgroups | gmane.comp.gnu.glpk |
|---|---|
| Message-ID | <MW4PR06MB8379A7C1D7007E0B60910C8BF59D9@MW4PR06MB8379.namprd06.prod.outlook.com> |
--_000_MW4PR06MB8379A7C1D7007E0B60910C8BF59D9MW4PR06MB8379namp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Dear glpk-users,
In Octave:
[z_opt,f_min,errnum,extra]=3Dglpk(c,A,b,vlb,vub,ctype,vartype,sense)
How can be transformed to use it in R?
If I use it:
Rglpk_solve_LP(obj =3D c, mat =3D A, dir =3D c("<=3D", "<=3D", "<=3D"), rhs=
=3D b)
Give me an error:
Error in Rglpk_call(obj =3D obj, mat =3D mat, dir =3D dir, rhs =3D rhs, bou=
nds =3D bounds, :
Arguments 'mat', 'dir', and/or 'rhs' not conformable.
Where:
> str(c)
num [1:30, 1] 0 0 0 0 0 0 0 0 0 0 ...
> str(A)
num [1:21, 1:30] 1 0 0 0 0 0 0 0 0 0 ...
> str(b)
num [1:50, 1] 22 37 37 37 37 37 37 37 37 37 ...
> str(vlb)
num [1:30, 1] 0 0 0 0 0 0 0 0 0 0 ...
> str(vub)
num [1:30, 1] 150 150 150 150 150 150 150 150 150 150 ...
> str(ctype)
chr [1:21] "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "U" "U" "U" "U" "U" =
"U" "U" "U" "U" "U"
> str(vartype)
chr [1:3, 1:10] "C" "I" "C" "C" "I" "C" "C" "I" "C" "C" "I" "C" "C" "I" "C"=
"C" "I" "C" "C" "I" "C" "C" "I" "C" "C" "I" "C" "C" "I" "C"
- attr(*, "dimnames")=3DList of 2
..$ : chr [1:3] "varcont" "varint" "varcont"
..$ : NULL
> str(sense)
num 1
My script in R is:
#1) Datos
#Per=EDodo de estudio (d=EDas)
T =3D 10
#Demanda diaria
dda =3D 37*matrix(1,T,1)
#Capacidad de cami=F3n (m3)
K=3D30
#Capacidad de tanque (m3)
cap_tqe=3D40
#Stock inicial (m3)
s0=3D15
#Max cantidad diaria de camiones
y_max=3D5
#Max volumen entrega diaria
x_max=3DK*y_max
#2) Modelo sin entrega los domingos
#Variables: z=3D[x; y; s], entega x(t), cant camiones y(t), stock final s(t=
)
c =3D matrix(rep(c(0,1,0),each =3D T)) #solo cuestan los viajes
vlb =3D matrix(rep(0,3*T))
vub =3D matrix(c(x_max*rep(1,T),y_max*rep(1,T), cap_tqe*rep(1,T)))
#
#Restricciones grupo1: balanceen cada t, s(t)=3Ds(t-1)+x(t)-dda(t)
A1=3Dmatrix(0,nrow=3DT,ncol=3D3*T)
A1[,1:T]=3Ddiag(1,dim(A1[,1:T]))
library(pracma)
A1[,(2*T+1):(3*T)]=3D-diag(1,T,T)+Diag(rep(1,T-1),-1)
b1 =3D dda
b1[1] =3D b1[1]-s0
#Restricciones grupo2: balanceen cada t, s(t)=3Ds(t-1)+x(t)-dda(t)
n7=3Dfloor(T/7)
A2=3Dmatrix(0,ncol=3D3*T,nrow=3Dn7)
b2=3Dmatrix(0,nrow=3D3*T,ncol=3D1)
ifelse(rem(col(A2),7)=3D=3D0,1,0)
#Restricciones grupo3: vol entregado menor y cant camiones, x(t)<K*y(t)
A3=3Dmatrix(0,nrow=3DT,ncol=3D3*T)
A3[,1:T]=3Ddiag(1,T)
A3[,(T+1):(2*T)]=3Ddiag(-K,T)
b3=3Dmatrix(0,nrow=3DT,ncol=3D1)
#
A =3D rbind(A1,A2,A3)
b =3D rbind(b1,b2,b3)
#Tipo de variables y restricciones
varint=3Drep("I",T)
varcont=3Drep("C",T)
ctype=3Drep("S",T)
vartype=3Drbind(varcont, varint, varcont)
ctype=3Dc(ctype, rep("S",n7))
ctype=3Dc(ctype, rep("U",T))
#
sense=3D1;
Thanks in advance!
See you!
Sebasti=E1n.
--_000_MW4PR06MB8379A7C1D7007E0B60910C8BF59D9MW4PR06MB8379namp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang=3D"ES-UY" link=3D"blue" vlink=3D"#954F72" style=3D"word-wrap:bre=
ak-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span lang=3D"ES">Dear glpk-users,<o:p></o:p></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">In Octave:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">[z_opt,f_min,errnum,extra]=3Dglpk(=
c,A,b,vlb,vub,ctype,vartype,sense)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">How can be transformed to use it i=
n R?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">If I use it:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">Rglpk_solve_LP(obj =3D c, mat =3D =
A, dir =3D c("<=3D", "<=3D", "<=3D")=
, rhs =3D b)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">Give me an error:<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">Error in Rglpk_call(obj =3D obj, m=
at =3D mat, dir =3D dir, rhs =3D rhs, bounds =3D bounds, :
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"> Arguments 'mat', 'dir'=
, and/or 'rhs' not conformable.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">Where:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">> str(c)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">num [1:30, 1] 0 0 0 0 0 0 0 0 0 0 =
...<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">> str(A)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES">num [1:21, 1:30] 1 0 0 0 0 0 0 0 0=
0 ...<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"ES"><o:p> </o:p></span></p>
<p class=3D"MsoNormal">> str(b)</p>
<p class=3D"MsoNormal">num [1:50, 1] 22 37 37 37 37 37 37 37 37 37 ...</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">> str(vlb)</p>
<p class=3D"MsoNormal">num [1:30, 1] 0 0 0 0 0 0 0 0 0 0 ...</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">> str(vub)</p>
<p class=3D"MsoNormal">num [1:30, 1] 150 150 150 150 150 150 150 150 150 15=
0 ...</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">> str(ctype)</p>
<p class=3D"MsoNormal">chr [1:21] "S" "S" "S"=
"S" "S" "S" "S" "S" &quo=
t;S" "S" "S" "U" "U" "U&q=
uot; "U" "U" "U" "U" "U" =
"U" "U"</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">> str(vartype)</p>
<p class=3D"MsoNormal">chr [1:3, 1:10] "C" "I" "C&=
quot; "C" "I" "C" "C" "I"=
"C" "C" "I" "C" "C" &quo=
t;I" "C" "C" "I" "C" "C&q=
uot; "I" "C" "C" "I" "C" =
"C" "I" "C" "C" "I" "=
;C"</p>
<p class=3D"MsoNormal">- attr(*, "dimnames")=3DList of 2</p>
<p class=3D"MsoNormal"> ..$ : chr [1:3] "varcont" "var=
int" "varcont"</p>
<p class=3D"MsoNormal"> ..$ : NULL</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">> str(sense)</p>
<p class=3D"MsoNormal">num 1</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">My script in R is:</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#1) Datos<o:p></o:p></s=
pan></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Per=EDodo de estudio (=
d=EDas)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">T =3D 10<o:p></o:p></sp=
an></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Demanda diaria<o:p></o=
:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">dda =3D 37*matrix(1,T,1=
)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Capacidad de cami=F3n =
(m3)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">K=3D30<o:p></o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Capacidad de tanque (m=
3)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">cap_tqe=3D40<o:p></o:p>=
</span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Stock inicial (m3)<o:p=
></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">s0=3D15<o:p></o:p></spa=
n></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Max cantidad diaria de=
camiones<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">y_max=3D5<o:p></o:p></s=
pan></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Max volumen entrega di=
aria<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">x_max=3DK*y_max<o:p></o=
:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#2) Modelo sin entrega =
los domingos<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Variables: z=3D[x; y; =
s], entega x(t), cant camiones y(t), stock final s(t)<o:p></o:p></span></b>=
</p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">c =3D matrix(rep(c(0,1,=
0),each =3D T)) #solo cuestan los viajes<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">vlb =3D matrix(rep(0,3*=
T))<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">vub =3D matrix(c(x_max*=
rep(1,T),y_max*rep(1,T), cap_tqe*rep(1,T)))<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#<o:p></o:p></span></b>=
</p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Restricciones grupo1: =
balanceen cada t, s(t)=3Ds(t-1)+x(t)-dda(t)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A1=3Dmatrix(0,nrow=3DT,=
ncol=3D3*T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A1[,1:T]=3Ddiag(1,dim(A=
1[,1:T]))<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">library(pracma)<o:p></o=
:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A1[,(2*T+1):(3*T)]=3D-d=
iag(1,T,T)+Diag(rep(1,T-1),-1)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">b1 =3D dda<o:p></o:p></=
span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">b1[1] =3D b1[1]-s0<o:p>=
</o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Restricciones grupo2: =
balanceen cada t, s(t)=3Ds(t-1)+x(t)-dda(t)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">n7=3Dfloor(T/7)<o:p></o=
:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A2=3Dmatrix(0,ncol=3D3*=
T,nrow=3Dn7)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">b2=3Dmatrix(0,nrow=3D3*=
T,ncol=3D1)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">ifelse(rem(col(A2),7)=
=3D=3D0,1,0)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Restricciones grupo3: =
vol entregado menor y cant camiones, x(t)<K*y(t)<o:p></o:p></span></b></=
p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A3=3Dmatrix(0,nrow=3DT,=
ncol=3D3*T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A3[,1:T]=3Ddiag(1,T)<o:=
p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A3[,(T+1):(2*T)]=3Ddiag=
(-K,T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">b3=3Dmatrix(0,nrow=3DT,=
ncol=3D1)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#<o:p></o:p></span></b>=
</p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">A =3D rbind(A1,A2,A3)<o=
:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">b =3D rbind(b1,b2,b3)<o=
:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#Tipo de variables y re=
stricciones<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">varint=3Drep("I&qu=
ot;,T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">varcont=3Drep("C&q=
uot;,T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">ctype=3Drep("S&quo=
t;,T)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">vartype=3Drbind(varcont=
, varint, varcont)<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">ctype=3Dc(ctype, rep(&q=
uot;S",n7))<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">ctype=3Dc(ctype, rep(&q=
uot;U",T))<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red"><o:p> </o:p></span=
></b></p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">#<o:p></o:p></span></b>=
</p>
<p class=3D"MsoNormal"><b><span style=3D"color:red">sense=3D1;<o:p></o:p></=
span></b></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">Thanks in advance!</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">See you!</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">Sebasti=E1n.</p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>
--_000_MW4PR06MB8379A7C1D7007E0B60910C8BF59D9MW4PR06MB8379namp_--