Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
sparrowzz
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
sgool
sparrowzz
Commits
40a0f0f2
Commit
40a0f0f2
authored
Aug 05, 2024
by
dongshufeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
little change
parent
c656429d
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
68 行增加
和
459 行删除
+68
-459
Cargo.lock
+47
-36
eig-aoe/src/aoe/mod.rs
+4
-2
eig-aoe/src/lib.rs
+11
-5
eig-aoe/src/solvers/mod.rs
+0
-5
eig-aoe/src/solvers/model.rs
+3
-133
eig-aoe/src/solvers/utils.rs
+3
-278
没有找到文件。
Cargo.lock
查看文件 @
40a0f0f2
...
@@ -58,9 +58,9 @@ dependencies = [
...
@@ -58,9 +58,9 @@ dependencies = [
[[package]]
[[package]]
name = "arrow-schema"
name = "arrow-schema"
version = "52.
1
.0"
version = "52.
2
.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
dab1c12b40e29d9f3b699e0203c2a73ba558444c05e388a4377208f8f9c97eee
"
checksum = "
9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8
"
dependencies = [
dependencies = [
"serde",
"serde",
]
]
...
@@ -114,9 +114,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
...
@@ -114,9 +114,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
[[package]]
name = "bytemuck"
name = "bytemuck"
version = "1.16.
1
"
version = "1.16.
3
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e
"
checksum = "
102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83
"
[[package]]
[[package]]
name = "byteorder"
name = "byteorder"
...
@@ -126,9 +126,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
...
@@ -126,9 +126,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
[[package]]
name = "bytes"
name = "bytes"
version = "1.
6
.1"
version = "1.
7
.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952
"
checksum = "
8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50
"
[[package]]
[[package]]
name = "calamine"
name = "calamine"
...
@@ -147,9 +147,9 @@ dependencies = [
...
@@ -147,9 +147,9 @@ dependencies = [
[[package]]
[[package]]
name = "cc"
name = "cc"
version = "1.1.
6
"
version = "1.1.
7
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2
aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f
"
checksum = "2
6a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc
"
[[package]]
[[package]]
name = "cfg-if"
name = "cfg-if"
...
@@ -453,7 +453,7 @@ dependencies = [
...
@@ -453,7 +453,7 @@ dependencies = [
"serde_json",
"serde_json",
"tempfile",
"tempfile",
"walkdir",
"walkdir",
"zip 2.1.
5
",
"zip 2.1.
6
",
]
]
[[package]]
[[package]]
...
@@ -498,7 +498,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -498,7 +498,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
dependencies = [
dependencies = [
"libc",
"libc",
"windows-sys",
"windows-sys
0.52.0
",
]
]
[[package]]
[[package]]
...
@@ -536,9 +536,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
...
@@ -536,9 +536,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
[[package]]
name = "flate2"
name = "flate2"
version = "1.0.3
0
"
version = "1.0.3
1
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae
"
checksum = "
7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920
"
dependencies = [
dependencies = [
"crc32fast",
"crc32fast",
"miniz_oxide",
"miniz_oxide",
...
@@ -578,7 +578,7 @@ version = "0.5.9"
...
@@ -578,7 +578,7 @@ version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
dependencies = [
dependencies = [
"windows-sys",
"windows-sys
0.52.0
",
]
]
[[package]]
[[package]]
...
@@ -606,9 +606,9 @@ dependencies = [
...
@@ -606,9 +606,9 @@ dependencies = [
[[package]]
[[package]]
name = "indexmap"
name = "indexmap"
version = "2.
2.6
"
version = "2.
3.0
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26
"
checksum = "
de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0
"
dependencies = [
dependencies = [
"equivalent",
"equivalent",
"hashbrown",
"hashbrown",
...
@@ -661,9 +661,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
...
@@ -661,9 +661,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
[[package]]
name = "matrixmultiply"
name = "matrixmultiply"
version = "0.3.
8
"
version = "0.3.
9
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2
"
checksum = "
9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a
"
dependencies = [
dependencies = [
"autocfg",
"autocfg",
"rawpointer",
"rawpointer",
...
@@ -816,18 +816,18 @@ dependencies = [
...
@@ -816,18 +816,18 @@ dependencies = [
[[package]]
[[package]]
name = "num_enum"
name = "num_enum"
version = "0.7.
2
"
version = "0.7.
3
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845
"
checksum = "
4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179
"
dependencies = [
dependencies = [
"num_enum_derive",
"num_enum_derive",
]
]
[[package]]
[[package]]
name = "num_enum_derive"
name = "num_enum_derive"
version = "0.7.
2
"
version = "0.7.
3
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b
"
checksum = "
af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56
"
dependencies = [
dependencies = [
"proc-macro-crate",
"proc-macro-crate",
"proc-macro2",
"proc-macro2",
...
@@ -986,9 +986,9 @@ dependencies = [
...
@@ -986,9 +986,9 @@ dependencies = [
[[package]]
[[package]]
name = "regex"
name = "regex"
version = "1.10.
5
"
version = "1.10.
6
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f
"
checksum = "
4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619
"
dependencies = [
dependencies = [
"aho-corasick",
"aho-corasick",
"memchr",
"memchr",
...
@@ -1029,7 +1029,7 @@ dependencies = [
...
@@ -1029,7 +1029,7 @@ dependencies = [
"errno",
"errno",
"libc",
"libc",
"linux-raw-sys",
"linux-raw-sys",
"windows-sys",
"windows-sys
0.52.0
",
]
]
[[package]]
[[package]]
...
@@ -1078,11 +1078,12 @@ dependencies = [
...
@@ -1078,11 +1078,12 @@ dependencies = [
[[package]]
[[package]]
name = "serde_json"
name = "serde_json"
version = "1.0.12
0
"
version = "1.0.12
2
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5
"
checksum = "
784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da
"
dependencies = [
dependencies = [
"itoa",
"itoa",
"memchr",
"ryu",
"ryu",
"serde",
"serde",
]
]
...
@@ -1119,14 +1120,15 @@ dependencies = [
...
@@ -1119,14 +1120,15 @@ dependencies = [
[[package]]
[[package]]
name = "tempfile"
name = "tempfile"
version = "3.1
0.1
"
version = "3.1
1.0
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1
"
checksum = "
b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53
"
dependencies = [
dependencies = [
"cfg-if",
"cfg-if",
"fastrand",
"fastrand",
"once_cell",
"rustix",
"rustix",
"windows-sys",
"windows-sys
0.52.0
",
]
]
[[package]]
[[package]]
...
@@ -1151,9 +1153,9 @@ dependencies = [
...
@@ -1151,9 +1153,9 @@ dependencies = [
[[package]]
[[package]]
name = "toml_datetime"
name = "toml_datetime"
version = "0.6.
7
"
version = "0.6.
8
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db
"
checksum = "
0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41
"
[[package]]
[[package]]
name = "toml_edit"
name = "toml_edit"
...
@@ -1266,11 +1268,11 @@ dependencies = [
...
@@ -1266,11 +1268,11 @@ dependencies = [
[[package]]
[[package]]
name = "winapi-util"
name = "winapi-util"
version = "0.1.
8
"
version = "0.1.
9
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6
b"
checksum = "
cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10b
b"
dependencies = [
dependencies = [
"windows-sys",
"windows-sys
0.59.0
",
]
]
[[package]]
[[package]]
...
@@ -1292,6 +1294,15 @@ dependencies = [
...
@@ -1292,6 +1294,15 @@ dependencies = [
]
]
[[package]]
[[package]]
name = "windows-sys"
version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
name = "windows-targets"
version = "0.52.6"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -1382,9 +1393,9 @@ dependencies = [
...
@@ -1382,9 +1393,9 @@ dependencies = [
[[package]]
[[package]]
name = "zip"
name = "zip"
version = "2.1.
5
"
version = "2.1.
6
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
b895748a3ebcb69b9d38dcfdf21760859a4b0d0b0015277640c2ef4c69640e6f
"
checksum = "
40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e
"
dependencies = [
dependencies = [
"arbitrary",
"arbitrary",
"crc32fast",
"crc32fast",
...
...
eig-aoe/src/aoe/mod.rs
查看文件 @
40a0f0f2
// flowing should as same as in sparrowzz
use
std
::
collections
::
HashMap
;
use
std
::
collections
::
HashMap
;
use
std
::
fmt
;
use
std
::
fmt
;
use
std
::
fmt
::
Display
;
use
std
::
fmt
::
Display
;
...
@@ -390,4 +391,5 @@ pub struct Aoe {
...
@@ -390,4 +391,5 @@ pub struct Aoe {
pub
(
crate
)
var_index
:
HashMap
<
String
,
u64
>
,
pub
(
crate
)
var_index
:
HashMap
<
String
,
u64
>
,
// 上面定义变量相互之间的关系
// 上面定义变量相互之间的关系
pub
(
crate
)
expr_graph
:
Option
<
ExprGraph
>
,
pub
(
crate
)
expr_graph
:
Option
<
ExprGraph
>
,
}
}
\ No newline at end of file
// above should as same as in sparrowzz
\ No newline at end of file
eig-aoe/src/lib.rs
查看文件 @
40a0f0f2
// flowing should as same as in sparrowzz
pub
mod
aoe
;
pub
mod
solvers
;
use
std
::
collections
::{
HashMap
,
HashSet
};
use
std
::
collections
::{
HashMap
,
HashSet
};
use
std
::
collections
::
hash_map
::
Iter
;
use
std
::
collections
::
hash_map
::
Iter
;
use
log
::
error
;
use
log
::
error
;
...
@@ -8,9 +12,6 @@ use petgraph::graphmap::DiGraphMap;
...
@@ -8,9 +12,6 @@ use petgraph::graphmap::DiGraphMap;
use
eig_domain
::{
Measurement
,
MeasureValue
};
use
eig_domain
::{
Measurement
,
MeasureValue
};
use
eig_expr
::{
Expr
,
Token
};
use
eig_expr
::{
Expr
,
Token
};
pub
mod
aoe
;
pub
mod
solvers
;
pub
const
AOE_RESULT_BUF
:
usize
=
100
;
pub
const
AOE_RESULT_BUF
:
usize
=
100
;
const
ERR_SUFFIX
:
&
str
=
"_err"
;
const
ERR_SUFFIX
:
&
str
=
"_err"
;
...
@@ -213,6 +214,10 @@ impl MeasureBuf {
...
@@ -213,6 +214,10 @@ impl MeasureBuf {
}
}
pub
fn
copy_sub
(
&
self
,
ids
:
&
HashSet
<
u64
>
,
is_copy_alias
:
bool
)
->
MeasureBuf
{
pub
fn
copy_sub
(
&
self
,
ids
:
&
HashSet
<
u64
>
,
is_copy_alias
:
bool
)
->
MeasureBuf
{
// means all
if
ids
.contains
(
&
0
)
{
return
self
.clone
();
}
let
v
:
Vec
<
(
Option
<
MeasureValue
>
,
Option
<
MeasureValue
>
,
Option
<
MeasureValue
>
)
>
=
ids
.iter
()
.map
(|
id
|
{
let
v
:
Vec
<
(
Option
<
MeasureValue
>
,
Option
<
MeasureValue
>
,
Option
<
MeasureValue
>
)
>
=
ids
.iter
()
.map
(|
id
|
{
let
mv
=
self
.current_mvs
.get
(
id
)
.cloned
();
let
mv
=
self
.current_mvs
.get
(
id
)
.cloned
();
let
last_mv
=
self
.last_mvs
.get
(
id
)
.cloned
();
let
last_mv
=
self
.last_mvs
.get
(
id
)
.cloned
();
...
@@ -354,4 +359,5 @@ impl MeasureBuf {
...
@@ -354,4 +359,5 @@ impl MeasureBuf {
let
status
=
self
.get_mv
(
point_id
);
let
status
=
self
.get_mv
(
point_id
);
status
.is_some
()
&&
status
.unwrap
()
.discrete_value
>
0
status
.is_some
()
&&
status
.unwrap
()
.discrete_value
>
0
}
}
}
}
\ No newline at end of file
// above should as same as in sparrowzz
\ No newline at end of file
eig-aoe/src/solvers/mod.rs
查看文件 @
40a0f0f2
pub
use
model
::
*
;
pub
use
model
::
*
;
#[cfg(feature
=
"nlp"
)]
pub
use
nlp
::
*
;
#[cfg(feature
=
"solvers"
)]
pub
use
solver
::
*
;
pub
use
utils
::
*
;
pub
use
utils
::
*
;
pub
mod
model
;
pub
mod
model
;
...
...
eig-aoe/src/solvers/model.rs
查看文件 @
40a0f0f2
// above should as same as in sparrowzz
use
std
::
collections
::
HashMap
;
use
std
::
collections
::
HashMap
;
use
log
::{
trace
,
warn
};
use
log
::{
trace
,
warn
};
...
@@ -1707,136 +1708,4 @@ impl SparseSolver {
...
@@ -1707,136 +1708,4 @@ impl SparseSolver {
}
}
}
}
}
}
// above should as same as in sparrowzz
#[cfg(test)]
\ No newline at end of file
mod
tests
{
use
crate
::
solvers
::{
MILP
,
NewtonSolver
,
NLP
,
SparseMILP
,
SparseSolver
};
#[test]
fn
test_parse
()
{
let
x
=
"1"
;
let
y
:
Vec
<&
str
>
=
x
.split
(
'/'
)
.collect
();
assert_eq!
(
1
,
y
.len
());
let
x
=
"1//"
;
let
y
:
Vec
<&
str
>
=
x
.split
(
'/'
)
.collect
();
assert_eq!
(
3
,
y
.len
());
let
x
=
"3/-4/"
;
let
y
:
Vec
<&
str
>
=
x
.split
(
'/'
)
.collect
();
assert_eq!
(
3
,
y
.len
());
let
x
=
"1/"
;
let
y
:
Vec
<&
str
>
=
x
.split
(
'/'
)
.collect
();
assert_eq!
(
2
,
y
.len
());
}
#[test]
fn
test_solve_to_str
()
{
let
s
=
"+224.7319*x1-35.5872*x2-32.8947*x4-156.25*x5=2.1;
\n
-35.5872*x1+128.1798*x2-92.5926*x3=-3;
\n
-92.5926*x2+126.2626*x3-33.67*x4=0.2349;
\n
x4=0;
\n
-156.25*x1-33.67*x4+3*x4-2*(x1+x2)=4.6651;
\n
x1,x2,x3,x4,x5"
;
let
expr_str
:
Vec
<&
str
>
=
s
.split
(
';'
)
.collect
();
let
model
=
SparseSolver
::
from_str
(
&
expr_str
)
.unwrap
();
let
to_str_temp
=
model
.to_str
();
let
to_str
=
format!
(
"{}
\n
{}"
,
to_str_temp
.
0
,
to_str_temp
.
1
);
// println!("{}",to_str);
let
expr_str2
:
Vec
<&
str
>
=
to_str
.split
(
';'
)
.collect
();
let
str_to_model
=
SparseSolver
::
from_str
(
&
expr_str2
)
.unwrap
();
assert_eq!
(
model
,
str_to_model
);
let
to_latex_temp
=
model
.to_latex
();
let
to_latex
=
format!
(
"{}{}"
,
to_latex_temp
.
0
,
to_latex_temp
.
1
);
println!
(
"{}"
,
to_latex
)
}
#[test]
fn
test_nlsolve_to_str
()
{
let
s
=
"2.10000000-0.00000000-V1*(V1*(22.25068569)+V2*(-3.52348402*cos(THETA1-THETA2)+35.23484021*sin(THETA1-THETA2))+V4*(-3.25690464*cos(THETA1-THETA4)+32.56904638*sin(THETA1-THETA4))+V5*(-15.47029703*cos(THETA1-THETA5)+154.70297030*sin(THETA1-THETA5)));
0.00000000-3.00000000-V2*(V1*(-3.52348402*cos(THETA2-THETA1)+35.23484021*sin(THETA2-THETA1))+V2*(12.69106745)+V3*(-9.16758343*cos(THETA2-THETA3)+91.67583425*sin(THETA2-THETA3)));
3.23490000-3.00000000-V3*(V2*(-9.16758343*cos(THETA3-THETA2)+91.67583425*sin(THETA3-THETA2))+V3*(12.50125013)+V4*(-3.33366670*cos(THETA3-THETA4)+33.33666700*sin(THETA3-THETA4)));
PG_balancenode-4.00000000-V4*(V1*(-3.25690464*cos(THETA4-THETA1)+32.56904638*sin(THETA4-THETA1))+V3*(-3.33366670*cos(THETA4-THETA3)+33.33666700*sin(THETA4-THETA3))+V4*(9.92423804)+V5*(-3.33366670*cos(THETA4-THETA5)+33.33666700*sin(THETA4-THETA5)));
4.66510000-0.00000000-V5*(V1*(-15.47029703*cos(THETA5-THETA1)+154.70297030*sin(THETA5-THETA1))+V4*(-3.33366670*cos(THETA5-THETA4)+33.33666700*sin(THETA5-THETA4))+V5*(18.80396373));
QG1+QG2-0.00000000-V1*(V1*(--222.48437689)+V2*(-3.52348402*sin(THETA1-THETA2)-35.23484021*cos(THETA1-THETA2))+V4*(-3.25690464*sin(THETA1-THETA4)-32.56904638*cos(THETA1-THETA4))+V5*(-15.47029703*sin(THETA1-THETA5)-154.70297030*cos(THETA1-THETA5)));
-0.98610000-V2*(V1*(-3.52348402*sin(THETA2-THETA1)-35.23484021*cos(THETA2-THETA1))+V2*(--126.89785446)+V3*(-9.16758343*sin(THETA2-THETA3)-91.67583425*cos(THETA2-THETA3)));
QG3-0.98610000-V3*(V2*(-9.16758343*sin(THETA3-THETA2)-91.67583425*cos(THETA3-THETA2))+V3*(--124.99987125)+V4*(-3.33366670*sin(THETA3-THETA4)-33.33666700*cos(THETA3-THETA4)));
QG4-1.31470000-V4*(V1*(-3.25690464*sin(THETA4-THETA1)-32.56904638*cos(THETA4-THETA1))+V3*(-3.33366670*sin(THETA4-THETA3)-33.33666700*cos(THETA4-THETA3))+V4*(--99.23235038)+V5*(-3.33366670*sin(THETA4-THETA5)-33.33666700*cos(THETA4-THETA5)));
QG5-0.00000000-V5*(V1*(-15.47029703*sin(THETA5-THETA1)-154.70297030*cos(THETA5-THETA1))+V4*(-3.33366670*sin(THETA5-THETA4)-33.33666700*cos(THETA5-THETA4))+V5*(--188.02063730));
V1-1.00000000;
V3-1.00000000;
V4-1.00000000;
V5-1.00000000;
THETA4;
QG1/0.40000000-QG2/1.70000000;
V1:1,V2:1,V3:1,V4:1,V5:1,THETA1,THETA2,THETA3,THETA4,THETA5,QG1,QG2,QG3,QG4,QG5,PG_balancenode"
;
let
expr_str
:
Vec
<&
str
>
=
s
.split
(
';'
)
.collect
();
let
model
=
NewtonSolver
::
from_str
(
&
expr_str
)
.unwrap
();
let
to_str_temp
=
model
.to_str
();
let
to_str
=
format!
(
"{}
\n
{}"
,
to_str_temp
.
0
,
to_str_temp
.
1
);
println!
(
"{}"
,
to_str
);
let
expr_str2
:
Vec
<&
str
>
=
to_str
.split
(
';'
)
.collect
();
let
str_to_model
=
NewtonSolver
::
from_str
(
&
expr_str2
)
.unwrap
();
assert_eq!
(
model
,
str_to_model
);
let
to_latex_temp
=
model
.to_latex
();
let
to_latex
=
format!
(
"{}
\n
{}"
,
to_latex_temp
.
0
,
to_latex_temp
.
1
);
println!
(
"{}"
,
to_latex
);
}
#[test]
fn
test_simple_milp_to_str
()
{
let
s
=
"max( 3*x2+5*x1+2*x3+(10-3)*x4+4*x5);
2*x1+(2*4)*x2+4*x3+2*x4+max(1,5)*x5 <= 5*2;
2 + x1 >= 3;
x1:1,x2:1,x3:1,x4:1,x5:1"
;
let
expr_str
:
Vec
<&
str
>
=
s
.split
(
';'
)
.collect
();
let
model
=
SparseMILP
::
from_str
(
&
expr_str
)
.unwrap
();
let
to_str_temp
=
model
.to_str
();
let
to_str
=
format!
(
"{}
\n
{}{}"
,
to_str_temp
.
0
,
to_str_temp
.
1
,
to_str_temp
.
2
);
// println!("{}",to_str);
let
expr_str2
:
Vec
<&
str
>
=
to_str
.split
(
';'
)
.collect
();
let
str_to_model
=
SparseMILP
::
from_str
(
&
expr_str2
)
.unwrap
();
assert_eq!
(
model
,
str_to_model
);
let
to_latex_temp
=
model
.to_latex
();
let
to_latex
=
format!
(
"{}{}{}"
,
to_latex_temp
.
0
,
to_latex_temp
.
1
,
to_latex_temp
.
2
);
println!
(
"{}"
,
to_latex
);
}
#[test]
fn
test_milp_to_str
()
{
let
expr_str
=
[
"max(4+1,3,0,10-3,4)"
,
// 目标函数
"g(2, 2*4, 4, 2, max(1,5)) <= 5*2"
,
// 约束
"g(2, 2*4, 0, 0, 3) <= 5*2"
,
// 约束
"t(1,2,3,4,5) <= 8"
,
"x1:1,x2:1,x3:1,x4:1,x5:1"
,
// 变量的名称、顺序及其类型
]
.to_vec
();
let
model
=
MILP
::
from_str
(
&
expr_str
)
.unwrap
();
let
to_str_temp
=
model
.to_str
();
let
to_str
=
format!
(
"{}
\n
{}{}"
,
to_str_temp
.
0
,
to_str_temp
.
1
,
to_str_temp
.
2
);
let
expr_str2
:
Vec
<&
str
>
=
to_str
.split
(
';'
)
.collect
();
// println!("{}",to_str);
let
str_to_model
=
MILP
::
from_str
(
&
expr_str2
)
.unwrap
();
assert_eq!
(
model
,
str_to_model
);
}
#[test]
fn
test_nlp_to_str
()
{
let
s
=
"x1*x4*(x1+x2+x3)+x3;
x1*x2*x3*x4:[25/2e19];
x1^2+x2^2+x3^2+x4^2:[40/40];
x1:[/],x2:[1/1/3],x3:[/5],x4:[1/]"
;
let
expr_str
:
Vec
<&
str
>
=
s
.split
(
';'
)
.collect
();
let
model
=
NLP
::
from_str
(
&
expr_str
)
.unwrap
();
let
to_str_temp
=
model
.to_str
();
let
to_str
=
format!
(
"{}
\n
{}{}"
,
to_str_temp
.
0
,
to_str_temp
.
1
,
to_str_temp
.
2
);
let
expr_str2
:
Vec
<&
str
>
=
to_str
.split
(
';'
)
.collect
();
let
str_to_model
=
NLP
::
from_str
(
&
expr_str2
)
.unwrap
();
assert_eq!
(
model
,
str_to_model
);
let
to_latex_temp
=
model
.to_latex
();
let
to_latex
=
format!
(
"{}{}{}"
,
to_latex_temp
.
0
,
to_latex_temp
.
1
,
to_latex_temp
.
2
);
println!
(
"{}"
,
to_latex
);
}
}
eig-aoe/src/solvers/utils.rs
查看文件 @
40a0f0f2
// flowing should as same as in sparrowzz
use
std
::
collections
::{
HashMap
,
VecDeque
};
use
std
::
collections
::{
HashMap
,
VecDeque
};
use
log
::
warn
;
use
log
::
warn
;
...
@@ -767,281 +768,4 @@ pub fn read_parameters_from_str(parameters_str: &[&str]) -> Result<HashMap<Strin
...
@@ -767,281 +768,4 @@ pub fn read_parameters_from_str(parameters_str: &[&str]) -> Result<HashMap<Strin
}
}
Ok
(
parameters
)
Ok
(
parameters
)
}
}
// above should as same as in sparrowzz
#[cfg(test)]
\ No newline at end of file
mod
tests
{
use
std
::
collections
::
HashMap
;
use
eig_expr
::
Expr
;
use
eig_expr
::{
Operation
,
Token
::
*
};
use
crate
::
solvers
::
utils
::
merge_two_linear_expr
;
use
crate
::
solvers
::{
get_expr_from_fun
,
split_linear_expr
};
#[test]
fn
test_split_expr
()
{
let
expr
:
Expr
=
"x1+x2 == x3+x4"
.parse
()
.unwrap
();
assert_eq!
(
Binary
(
Operation
::
Equal
),
expr
.rpn
[
expr
.rpn
.len
()
-
1
]);
let
r
=
get_expr_from_fun
(
expr
.rpn
);
assert
!
(
r
.is_some
());
let
v
=
r
.unwrap
();
assert_eq!
(
2
,
v
.len
());
assert_eq!
(
3
,
v
[
0
]
.rpn
.len
());
assert_eq!
(
3
,
v
[
1
]
.rpn
.len
());
let
expr
:
Expr
=
"-x1-(1.0+ 2.0)*x2 == x3+x4"
.parse
()
.unwrap
();
assert_eq!
(
Binary
(
Operation
::
Equal
),
expr
.rpn
[
expr
.rpn
.len
()
-
1
]);
let
r
=
get_expr_from_fun
(
expr
.rpn
);
assert
!
(
r
.is_some
());
let
v
=
r
.unwrap
();
assert_eq!
(
2
,
v
.len
());
assert_eq!
(
3
,
v
[
1
]
.rpn
.len
());
}
#[test]
fn
test_merge_exprs
()
{
let
expr1
:
Expr
=
"-x1-(1.0+ 2.0)*x2"
.parse
()
.unwrap
();
let
expr2
:
Expr
=
" x3+x4"
.parse
()
.unwrap
();
let
mut
right
=
expr2
.rpn
.into
();
let
b
=
merge_two_linear_expr
(
expr1
.rpn
.into
(),
&
mut
right
,
Operation
::
Plus
);
assert
!
(
b
);
let
r
=
Expr
::
from_vec
(
right
.into
());
let
f
=
r
.bind4
(
"x1"
,
"x2"
,
"x3"
,
"x4"
)
.unwrap
();
assert_eq!
(
f
(
2
.
,
1
.
,
4
.
,
5
.
),
4
.
);
let
expr1
:
Expr
=
"-x1-(1.0+ 2.0)*x2"
.parse
()
.unwrap
();
let
expr2
:
Expr
=
" x3+x4"
.parse
()
.unwrap
();
let
mut
right
=
expr2
.rpn
.into
();
let
b
=
merge_two_linear_expr
(
expr1
.rpn
.into
(),
&
mut
right
,
Operation
::
LtOrEqual
);
assert
!
(
b
);
let
r
=
Expr
::
from_vec
(
right
.into
());
let
f
=
r
.bind4
(
"x1"
,
"x2"
,
"x3"
,
"x4"
)
.unwrap
();
assert_eq!
(
f
(
2
.
,
1
.
,
4
.
,
5
.
),
1
.
);
}
#[test]
fn
test_sparse_from_str
()
{
use
rayon
::
prelude
::
*
;
let
mut
x_pos
=
HashMap
::
new
();
x_pos
.insert
(
"x1"
.to_string
(),
0
);
x_pos
.insert
(
"x2"
.to_string
(),
1
);
x_pos
.insert
(
"x3"
.to_string
(),
2
);
x_pos
.insert
(
"x4"
.to_string
(),
3
);
x_pos
.insert
(
"x5"
.to_string
(),
4
);
let
expr
:
Expr
=
"x1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
1
,
a
.first
()
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
1.0
)]),
a
.first
()
.unwrap
()
.
1
);
let
expr
:
Expr
=
"x1+x2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
1
,
a
.first
()
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
1.0
)]),
a
.first
()
.unwrap
()
.
1
);
assert_eq!
(
2
,
a
.get
(
1
)
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
1.0
)]),
a
.get
(
1
)
.unwrap
()
.
1
);
let
expr
:
Expr
=
"x1-x2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
1
,
a
.first
()
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
1.0
)]),
a
.first
()
.unwrap
()
.
1
);
assert_eq!
(
2
,
a
.get
(
1
)
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
-
1.0
)]),
a
.get
(
1
)
.unwrap
()
.
1
);
let
expr
:
Expr
=
"-x1-(1.0+ 2.0)*x2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
2
,
a
.len
());
assert_eq!
(
1
,
a
.first
()
.unwrap
()
.
0
);
assert_eq!
(
Expr
::
from_vec
(
vec!
[
Number
(
-
1.0
)]),
a
.first
()
.unwrap
()
.
1
);
assert_eq!
(
2
,
a
.get
(
1
)
.unwrap
()
.
0
);
assert_eq!
(
-
3.0
,
a
.get
(
1
)
.unwrap
()
.
1
.eval
()
.unwrap
());
let
expr
:
Expr
=
"(5*1)*x1+3*x2+2*x3+(10-3)*x4+4*x5"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
5
,
a
.len
());
let
c_vec
:
Vec
<
f64
>
=
a
.par_iter
()
.map
(|
x
|
x
.
1
.eval
()
.unwrap
())
.collect
();
assert_eq!
(
vec!
[
5.0
,
3.0
,
2.0
,
7.0
,
4.0
],
c_vec
);
let
expr
:
Expr
=
"10*x4 + x5 + (5*1)*x1+3*x2+2*x3-3*x4+(1 + 2*1)*x5"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
)
.unwrap
();
let
c_vec
:
Vec
<
f64
>
=
r
.par_iter
()
.map
(|
x
|
x
.
1
.eval
()
.unwrap
())
.collect
();
assert_eq!
(
vec!
[
5.0
,
3.0
,
2.0
,
7.0
,
4.0
],
c_vec
);
let
expr
:
Expr
=
"3*x2+ (5*1)*x1 + (10-3)*x4+4*x5 + 2*x3"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
)
.unwrap
();
let
c_vec
:
Vec
<
f64
>
=
r
.par_iter
()
.map
(|
x
|
x
.
1
.eval
()
.unwrap
())
.collect
();
assert_eq!
(
vec!
[
5.0
,
3.0
,
2.0
,
7.0
,
4.0
],
c_vec
);
let
expr
:
Expr
=
"-(5*1)*x1-3*x2 -x3+(10-3)*x4+4*x5"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
5
,
a
.len
());
let
c_vec
:
Vec
<
f64
>
=
a
.par_iter
()
.map
(|
x
|
x
.
1
.eval
()
.unwrap
())
.collect
();
assert_eq!
(
vec!
[
-
5.0
,
-
3.0
,
-
1.0
,
7.0
,
4.0
],
c_vec
);
let
expr
:
Expr
=
"-(5*1)*x1-3*x2 -x3+(10-3)*x4-max(1,3)*x5"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
a
=
r
.unwrap
();
assert_eq!
(
5
,
a
.len
());
let
c_vec
:
Vec
<
f64
>
=
a
.par_iter
()
.map
(|
x
|
x
.
1
.eval
()
.unwrap
())
.collect
();
assert_eq!
(
vec!
[
-
5.0
,
-
3.0
,
-
1.0
,
7.0
,
-
3.0
],
c_vec
);
let
expr
:
Expr
=
"4513.391895-5.000000*x1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
expr
:
Expr
=
"6>=x1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_none
());
let
expr
:
Expr
=
"6"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
expr
:
Expr
=
"6+x1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
expr
:
Expr
=
"36000.000000 * x2-(1-0.000000)*x1*36000.000000-(1.000000*x3-x4/1.000000)*0.250000"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_some
());
let
expr
:
Expr
=
"x1*x2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert
!
(
r
.is_none
());
let
expr
:
Expr
=
"6-x1+ var1 * x2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Var
(
"var1"
.into
()),
Number
(
1.0
),
Binary
(
Operation
::
Times
)
])
)
],
r
.unwrap
()
);
let
expr
:
Expr
=
"6-x1+ x2/var1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Number
(
1.0
),
Var
(
"var1"
.into
()),
Binary
(
Operation
::
Div
)
])
)
],
r
.unwrap
()
);
let
expr
:
Expr
=
"6-x1+ x2/!2"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Number
(
0.5
)]))
],
r
.unwrap
()
);
let
expr
:
Expr
=
"6-x1+ x2/!var1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Number
(
1.0
),
Var
(
"var1"
.into
()),
Unary
(
Operation
::
Fact
),
Binary
(
Operation
::
Div
)
])
)
],
r
.unwrap
()
);
let
expr
:
Expr
=
"-6-x1-(5>=4)*3*x2/!var1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
-
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1.0
),
Number
(
3.0
),
Var
(
"var1"
.into
()),
Unary
(
Operation
::
Fact
),
Binary
(
Operation
::
Div
),
Binary
(
Operation
::
Times
)
])
)
],
r
.unwrap
()
);
let
expr
:
Expr
=
"-6-x1-((5>=4)*3*x2/!2 + (4<=1))*4"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[
(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
-
6
.
)])),
(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
-
1
.
)])),
(
2
,
Expr
::
from_vec
(
vec!
[
Number
(
-
6
.
)]))
],
r
.unwrap
()
);
let
expr
:
Expr
=
"log10(30-20)*x1"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[(
1
,
Expr
::
from_vec
(
vec!
[
Number
(
1
.
)]))],
r
.unwrap
());
let
expr
:
Expr
=
"some_func(30, var1 + 1., var2)"
.parse
()
.unwrap
();
let
r
=
split_linear_expr
(
expr
.rpn
,
&
x_pos
);
assert_eq!
(
vec!
[(
0
,
Expr
::
from_vec
(
vec!
[
Number
(
30
.
),
Var
(
"var1"
.into
()),
Number
(
1
.
),
Binary
(
Operation
::
Plus
),
Var
(
"var2"
.into
()),
Func
(
"some_func"
.into
(),
Some
(
3
))
])
)],
r
.unwrap
()
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论