Maniverse 0.3.1__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Maniverse might be problematic. Click here for more details.
- {maniverse-0.3.1 → maniverse-0.3.3/Maniverse.egg-info}/PKG-INFO +2 -7
- {maniverse-0.3.1 → maniverse-0.3.3}/Maniverse.egg-info/SOURCES.txt +14 -1
- maniverse-0.3.3/Maniverse.egg-info/top_level.txt +4 -0
- {maniverse-0.3.1/Maniverse.egg-info → maniverse-0.3.3}/PKG-INFO +2 -7
- {maniverse-0.3.1 → maniverse-0.3.3}/README.md +1 -6
- {maniverse-0.3.1 → maniverse-0.3.3}/pyproject.toml +1 -1
- {maniverse-0.3.1 → maniverse-0.3.3}/setup.py +24 -24
- maniverse-0.3.3/src/Macro.h +19 -0
- maniverse-0.3.3/src/Manifold/Grassmann.h +27 -0
- maniverse-0.3.3/src/Manifold/Manifold.h +47 -0
- maniverse-0.3.3/src/Manifold/Orthogonal.h +23 -0
- maniverse-0.3.3/src/Manifold/PyManifoldIn.h +5 -0
- maniverse-0.3.3/src/Manifold/PyManifoldOut.h +5 -0
- maniverse-0.3.3/src/Manifold/Simplex.h +24 -0
- maniverse-0.3.3/src/Manifold/TransRotInvPointCloud.h +23 -0
- maniverse-0.3.3/src/Optimizer/HessUpdate.h +21 -0
- maniverse-0.3.3/src/Optimizer/PyOptimizerIn.h +3 -0
- maniverse-0.3.3/src/Optimizer/PyOptimizerOut.h +3 -0
- maniverse-0.3.3/src/Optimizer/SubSolver.h +16 -0
- maniverse-0.3.3/src/Optimizer/TrustRegion.h +33 -0
- maniverse-0.3.1/Maniverse.egg-info/top_level.txt +0 -1
- {maniverse-0.3.1 → maniverse-0.3.3}/LICENSE +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/Maniverse.egg-info/dependency_links.txt +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/setup.cfg +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Manifold/Grassmann.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Manifold/Manifold.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Manifold/Orthogonal.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Manifold/Simplex.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Manifold/TransRotInvPointCloud.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Optimizer/HessUpdate.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Optimizer/SubSolver.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/Optimizer/TrustRegion.cpp +0 -0
- {maniverse-0.3.1 → maniverse-0.3.3}/src/PyManiverse.cpp +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Maniverse
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Numerical optimization on manifolds
|
|
5
5
|
Home-page: https://github.com/FreemanTheMaverick/Maniverse.git
|
|
6
6
|
Author: FreemanTheMaverick
|
|
@@ -78,12 +78,7 @@ $ git clone https://github.com/FreemanTheMaverick/Maniverse.git
|
|
|
78
78
|
$ python
|
|
79
79
|
>>> import Maniverse as mv
|
|
80
80
|
```
|
|
81
|
-
### Pip (for Python
|
|
82
|
-
* Setting environment variables
|
|
83
|
-
```
|
|
84
|
-
$ export PYTHON3=[The path where you can find "Python.h".] # You may check this by the command "locate Python.h".
|
|
85
|
-
$ export EIGEN3=[The path where you can find "Eigen/", "signature_of_eigen3_matrix_library" and "unsupported/".] # This is optional. If this is not set, the Eigen3 library will be downloaded automatically.
|
|
86
|
-
```
|
|
81
|
+
### Pip (for Python only)
|
|
87
82
|
* Installation with `pip`
|
|
88
83
|
```
|
|
89
84
|
pip install Maniverse
|
|
@@ -6,12 +6,25 @@ Maniverse.egg-info/PKG-INFO
|
|
|
6
6
|
Maniverse.egg-info/SOURCES.txt
|
|
7
7
|
Maniverse.egg-info/dependency_links.txt
|
|
8
8
|
Maniverse.egg-info/top_level.txt
|
|
9
|
+
src/Macro.h
|
|
9
10
|
src/PyManiverse.cpp
|
|
10
11
|
src/Manifold/Grassmann.cpp
|
|
12
|
+
src/Manifold/Grassmann.h
|
|
11
13
|
src/Manifold/Manifold.cpp
|
|
14
|
+
src/Manifold/Manifold.h
|
|
12
15
|
src/Manifold/Orthogonal.cpp
|
|
16
|
+
src/Manifold/Orthogonal.h
|
|
17
|
+
src/Manifold/PyManifoldIn.h
|
|
18
|
+
src/Manifold/PyManifoldOut.h
|
|
13
19
|
src/Manifold/Simplex.cpp
|
|
20
|
+
src/Manifold/Simplex.h
|
|
14
21
|
src/Manifold/TransRotInvPointCloud.cpp
|
|
22
|
+
src/Manifold/TransRotInvPointCloud.h
|
|
15
23
|
src/Optimizer/HessUpdate.cpp
|
|
24
|
+
src/Optimizer/HessUpdate.h
|
|
25
|
+
src/Optimizer/PyOptimizerIn.h
|
|
26
|
+
src/Optimizer/PyOptimizerOut.h
|
|
16
27
|
src/Optimizer/SubSolver.cpp
|
|
17
|
-
src/Optimizer/
|
|
28
|
+
src/Optimizer/SubSolver.h
|
|
29
|
+
src/Optimizer/TrustRegion.cpp
|
|
30
|
+
src/Optimizer/TrustRegion.h
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Maniverse
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Numerical optimization on manifolds
|
|
5
5
|
Home-page: https://github.com/FreemanTheMaverick/Maniverse.git
|
|
6
6
|
Author: FreemanTheMaverick
|
|
@@ -78,12 +78,7 @@ $ git clone https://github.com/FreemanTheMaverick/Maniverse.git
|
|
|
78
78
|
$ python
|
|
79
79
|
>>> import Maniverse as mv
|
|
80
80
|
```
|
|
81
|
-
### Pip (for Python
|
|
82
|
-
* Setting environment variables
|
|
83
|
-
```
|
|
84
|
-
$ export PYTHON3=[The path where you can find "Python.h".] # You may check this by the command "locate Python.h".
|
|
85
|
-
$ export EIGEN3=[The path where you can find "Eigen/", "signature_of_eigen3_matrix_library" and "unsupported/".] # This is optional. If this is not set, the Eigen3 library will be downloaded automatically.
|
|
86
|
-
```
|
|
81
|
+
### Pip (for Python only)
|
|
87
82
|
* Installation with `pip`
|
|
88
83
|
```
|
|
89
84
|
pip install Maniverse
|
|
@@ -61,12 +61,7 @@ $ git clone https://github.com/FreemanTheMaverick/Maniverse.git
|
|
|
61
61
|
$ python
|
|
62
62
|
>>> import Maniverse as mv
|
|
63
63
|
```
|
|
64
|
-
### Pip (for Python
|
|
65
|
-
* Setting environment variables
|
|
66
|
-
```
|
|
67
|
-
$ export PYTHON3=[The path where you can find "Python.h".] # You may check this by the command "locate Python.h".
|
|
68
|
-
$ export EIGEN3=[The path where you can find "Eigen/", "signature_of_eigen3_matrix_library" and "unsupported/".] # This is optional. If this is not set, the Eigen3 library will be downloaded automatically.
|
|
69
|
-
```
|
|
64
|
+
### Pip (for Python only)
|
|
70
65
|
* Installation with `pip`
|
|
71
66
|
```
|
|
72
67
|
pip install Maniverse
|
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
import os
|
|
2
|
-
import
|
|
2
|
+
import urllib.request
|
|
3
3
|
import tarfile
|
|
4
|
-
import subprocess
|
|
5
4
|
from glob import glob
|
|
6
5
|
from setuptools import setup, find_packages
|
|
7
|
-
from setuptools.command.
|
|
6
|
+
from setuptools.command.build_py import build_py
|
|
8
7
|
import pybind11
|
|
9
8
|
from pybind11.setup_helpers import Pybind11Extension, ParallelCompile, naive_recompile
|
|
10
9
|
|
|
11
|
-
__version__ = "0.3.
|
|
12
|
-
pwd = os.path.dirname(__file__)
|
|
13
|
-
|
|
14
|
-
# Checking dependencies
|
|
15
|
-
EIGEN3 = os.getenv("EIGEN3", default = '')
|
|
16
|
-
if len(EIGEN3) > 0:
|
|
17
|
-
print("Looking for Eigen3 at %s ..." % EIGEN3, end='')
|
|
18
|
-
if os.path.exists(EIGEN3 + "/Eigen/") and os.path.exists(EIGEN3 + "/unsupported/") and os.path.isfile(EIGEN3 + "/signature_of_eigen3_matrix_library"):
|
|
19
|
-
print("Found!")
|
|
20
|
-
else:
|
|
21
|
-
raise RuntimeError("Eigen3 does not exist!")
|
|
22
|
-
else:
|
|
23
|
-
print("The environment variable $EIGEN3 is not set. -> Downloading ...")
|
|
24
|
-
filename = wget.download("https://gitlab.com/libeigen/eigen/-/archive/3.4-rc1/eigen-3.4-rc1.tar.gz", bar = None)
|
|
25
|
-
with tarfile.open(filename) as tar:
|
|
26
|
-
tar.extractall(path = pwd) # Directory: eigen-3.4-rc1
|
|
27
|
-
EIGEN3 = pwd + "/eigen-3.4-rc1/"
|
|
28
|
-
print("EIGEN3 is %s." % EIGEN3)
|
|
10
|
+
__version__ = "0.3.3"
|
|
29
11
|
|
|
30
|
-
|
|
12
|
+
# Downloading Eigen3
|
|
13
|
+
pwd = os.path.dirname(__file__)
|
|
14
|
+
EIGEN3 = pwd + "/eigen-3.4-rc1/"
|
|
15
|
+
class CustomBuild(build_py):
|
|
16
|
+
def run(self):
|
|
17
|
+
url = "https://gitlab.com/libeigen/eigen/-/archive/3.4-rc1/eigen-3.4-rc1.tar.gz"
|
|
18
|
+
dest = pwd + "/eigen-3.4-rc1.tar.gz"
|
|
19
|
+
print("Downloading Eigen3 from %s to %s ..." % (url, dest))
|
|
20
|
+
urllib.request.urlretrieve(url, dest)
|
|
21
|
+
print("Extracting %s to %s ..." % (dest, EIGEN3))
|
|
22
|
+
with tarfile.open(dest) as tar:
|
|
23
|
+
tar.extractall(path = pwd) # Directory: eigen-3.4-rc1
|
|
24
|
+
super().run()
|
|
31
25
|
|
|
32
26
|
ParallelCompile(
|
|
33
27
|
"NPY_NUM_BUILD_JOBS",
|
|
@@ -35,12 +29,11 @@ ParallelCompile(
|
|
|
35
29
|
).install()
|
|
36
30
|
|
|
37
31
|
MV_CPP = sorted(glob("src/*.cpp") + glob("src/*/*.cpp"))
|
|
38
|
-
MV_HEADER = sorted(glob("src/*.h") + glob("src/*/*.h"))
|
|
39
32
|
ext_modules = [ Pybind11Extension(
|
|
40
33
|
"Maniverse",
|
|
41
34
|
MV_CPP,
|
|
42
35
|
undef_macros = ["DEBUG"],
|
|
43
|
-
include_dirs = [EIGEN3
|
|
36
|
+
include_dirs = [EIGEN3],
|
|
44
37
|
extra_compile_args = ["-O3", "-D__PYTHON__", "-DEIGEN_INITIALIZE_MATRICES_BY_ZERO"],
|
|
45
38
|
cxx_std = 17,
|
|
46
39
|
language = "c++"
|
|
@@ -54,6 +47,13 @@ setup(
|
|
|
54
47
|
long_description = open("README.md").read(),
|
|
55
48
|
long_description_content_type = "text/markdown",
|
|
56
49
|
url = "https://github.com/FreemanTheMaverick/Maniverse.git",
|
|
50
|
+
cmdclass = {"build_py": CustomBuild},
|
|
57
51
|
ext_modules = ext_modules,
|
|
52
|
+
packages = ["src", "src/Manifold", "src/Optimizer"],
|
|
53
|
+
package_data = {
|
|
54
|
+
"src": ["*.h"],
|
|
55
|
+
"src/Manifold": ["*.h"],
|
|
56
|
+
"src/Optimizer": ["*.h"],
|
|
57
|
+
},
|
|
58
58
|
classifiers = ["Programming Language :: Python :: 3"]
|
|
59
59
|
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#define EigenArray Eigen::ArrayXd
|
|
2
|
+
#define EigenVector Eigen::VectorXd
|
|
3
|
+
#define EigenDiagonal Eigen::DiagonalMatrix<double, -1, -1>
|
|
4
|
+
#define EigenMatrix Eigen::MatrixXd
|
|
5
|
+
#define EigenZero Eigen::MatrixXd::Zero
|
|
6
|
+
#define EigenOne Eigen::MatrixXd::Identity
|
|
7
|
+
|
|
8
|
+
#define Diag(X) (X).diagonal().asDiagonal()
|
|
9
|
+
#define Dot(X, Y) ( (X).transpose() * (Y) ).trace()
|
|
10
|
+
|
|
11
|
+
#define __Not_Implemented__\
|
|
12
|
+
std::string func_name = __func__;\
|
|
13
|
+
std::string class_name = typeid(*this).name();\
|
|
14
|
+
throw std::runtime_error(func_name + " for " + class_name + " is not implemented!");
|
|
15
|
+
|
|
16
|
+
#define __True_False__(x) ( x ? "True" : "False" )
|
|
17
|
+
|
|
18
|
+
#define __now__ std::chrono::high_resolution_clock::now()
|
|
19
|
+
#define __duration__(start, end) std::chrono::duration<double>(end - start).count()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include "Manifold.h"
|
|
2
|
+
|
|
3
|
+
class Grassmann: public Manifold{ public:
|
|
4
|
+
EigenMatrix Projector;
|
|
5
|
+
mutable std::vector<std::tuple<EigenMatrix, EigenMatrix>> LogCache;
|
|
6
|
+
mutable std::vector<std::tuple<EigenMatrix, EigenMatrix, EigenMatrix>> TransportTangentCache;
|
|
7
|
+
|
|
8
|
+
Grassmann(EigenMatrix p, bool matrix_free);
|
|
9
|
+
|
|
10
|
+
int getDimension() const override;
|
|
11
|
+
double Inner(EigenMatrix X, EigenMatrix Y) const override;
|
|
12
|
+
|
|
13
|
+
EigenMatrix Exponential(EigenMatrix X) const override;
|
|
14
|
+
EigenMatrix Logarithm(Manifold& N) const override;
|
|
15
|
+
|
|
16
|
+
EigenMatrix TangentProjection(EigenMatrix A) const override;
|
|
17
|
+
EigenMatrix TangentPurification(EigenMatrix A) const override;
|
|
18
|
+
|
|
19
|
+
EigenMatrix TransportTangent(EigenMatrix X, EigenMatrix Y) const override;
|
|
20
|
+
EigenMatrix TransportManifold(EigenMatrix X, Manifold& N) const override;
|
|
21
|
+
|
|
22
|
+
void Update(EigenMatrix p, bool purify) override;
|
|
23
|
+
void getGradient() override;
|
|
24
|
+
void getHessian() override;
|
|
25
|
+
|
|
26
|
+
std::unique_ptr<Manifold> Clone() const override;
|
|
27
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#define __Check_Log_Map__\
|
|
4
|
+
if ( typeid(N) != typeid(*this) )\
|
|
5
|
+
throw std::runtime_error("The point to logarithm map is not in " + std::string(typeid(*this).name()) + "but in " + std::string(typeid(N).name()) + "!");
|
|
6
|
+
|
|
7
|
+
#define __Check_Vec_Transport__\
|
|
8
|
+
if ( typeid(N) != typeid(*this) )\
|
|
9
|
+
throw std::runtime_error("The destination of vector transport is not in " + std::string(typeid(*this).name()) + "but in " + std::string(typeid(N).name()) + "!");
|
|
10
|
+
|
|
11
|
+
class Manifold{ public:
|
|
12
|
+
std::string Name;
|
|
13
|
+
EigenMatrix P;
|
|
14
|
+
EigenMatrix Ge;
|
|
15
|
+
EigenMatrix Gr;
|
|
16
|
+
bool MatrixFree;
|
|
17
|
+
EigenMatrix Hem;
|
|
18
|
+
std::vector<std::tuple<double, EigenMatrix>> Hrm;
|
|
19
|
+
std::function<EigenMatrix (EigenMatrix)> He;
|
|
20
|
+
std::function<EigenMatrix (EigenMatrix)> Hr;
|
|
21
|
+
std::vector<EigenMatrix> BasisSet;
|
|
22
|
+
|
|
23
|
+
Manifold(EigenMatrix p, bool matrix_free);
|
|
24
|
+
virtual int getDimension() const;
|
|
25
|
+
virtual double Inner(EigenMatrix X, EigenMatrix Y) const;
|
|
26
|
+
void getBasisSet();
|
|
27
|
+
void getHessianMatrix();
|
|
28
|
+
|
|
29
|
+
virtual EigenMatrix Exponential(EigenMatrix X) const;
|
|
30
|
+
virtual EigenMatrix Logarithm(Manifold& N) const;
|
|
31
|
+
|
|
32
|
+
virtual EigenMatrix TangentProjection(EigenMatrix A) const;
|
|
33
|
+
virtual EigenMatrix TangentPurification(EigenMatrix A) const;
|
|
34
|
+
|
|
35
|
+
virtual EigenMatrix TransportTangent(EigenMatrix X, EigenMatrix Y) const;
|
|
36
|
+
virtual EigenMatrix TransportManifold(EigenMatrix X, Manifold& N) const;
|
|
37
|
+
|
|
38
|
+
virtual void Update(EigenMatrix p, bool purify);
|
|
39
|
+
virtual void getGradient();
|
|
40
|
+
virtual void getHessian();
|
|
41
|
+
|
|
42
|
+
virtual ~Manifold() = default;
|
|
43
|
+
virtual std::unique_ptr<Manifold> Clone() const;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
std::vector<std::tuple<double, EigenMatrix>> Diagonalize(
|
|
47
|
+
EigenMatrix& A, std::vector<EigenMatrix>& basis_set);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#include "Manifold.h"
|
|
2
|
+
|
|
3
|
+
class Orthogonal: public Manifold{ public:
|
|
4
|
+
Orthogonal(EigenMatrix p, bool matrix_free);
|
|
5
|
+
|
|
6
|
+
int getDimension() const override;
|
|
7
|
+
double Inner(EigenMatrix X, EigenMatrix Y) const override;
|
|
8
|
+
|
|
9
|
+
EigenMatrix Exponential(EigenMatrix X) const override;
|
|
10
|
+
EigenMatrix Logarithm(Manifold& N) const override;
|
|
11
|
+
|
|
12
|
+
EigenMatrix TangentProjection(EigenMatrix A) const override;
|
|
13
|
+
EigenMatrix TangentPurification(EigenMatrix A) const override;
|
|
14
|
+
|
|
15
|
+
EigenMatrix TransportTangent(EigenMatrix X, EigenMatrix Y) const override;
|
|
16
|
+
EigenMatrix TransportManifold(EigenMatrix X, Manifold& N) const override;
|
|
17
|
+
|
|
18
|
+
void Update(EigenMatrix p, bool purify) override;
|
|
19
|
+
void getGradient() override;
|
|
20
|
+
void getHessian() override;
|
|
21
|
+
|
|
22
|
+
std::unique_ptr<Manifold> Clone() const override;
|
|
23
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#include "Manifold.h"
|
|
2
|
+
|
|
3
|
+
class Simplex: public Manifold{ public:
|
|
4
|
+
EigenMatrix Hem;
|
|
5
|
+
Simplex(EigenMatrix p, bool hess_transport_matrix);
|
|
6
|
+
|
|
7
|
+
int getDimension() const override;
|
|
8
|
+
double Inner(EigenMatrix X, EigenMatrix Y) const override;
|
|
9
|
+
|
|
10
|
+
EigenMatrix Exponential(EigenMatrix X) const override;
|
|
11
|
+
EigenMatrix Logarithm(Manifold& N) const override;
|
|
12
|
+
|
|
13
|
+
EigenMatrix TangentProjection(EigenMatrix A) const override;
|
|
14
|
+
EigenMatrix TangentPurification(EigenMatrix A) const override;
|
|
15
|
+
|
|
16
|
+
//EigenMatrix TransportTangent(EigenMatrix X, EigenMatrix Y) override;
|
|
17
|
+
//EigenMatrix TransportManifold(EigenMatrix X, Manifold& N) override;
|
|
18
|
+
|
|
19
|
+
void Update(EigenMatrix p, bool purify) override;
|
|
20
|
+
void getGradient() override;
|
|
21
|
+
void getHessian() override;
|
|
22
|
+
|
|
23
|
+
std::unique_ptr<Manifold> Clone() const override;
|
|
24
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#include "Manifold.h"
|
|
2
|
+
|
|
3
|
+
class TransRotInvPointCloud: public Manifold{ public:
|
|
4
|
+
TransRotInvPointCloud(EigenMatrix p, bool matrix_free);
|
|
5
|
+
|
|
6
|
+
int getDimension() const override;
|
|
7
|
+
double Inner(EigenMatrix X, EigenMatrix Y) const override;
|
|
8
|
+
|
|
9
|
+
EigenMatrix Exponential(EigenMatrix X) const override;
|
|
10
|
+
EigenMatrix Logarithm(Manifold& N) const override;
|
|
11
|
+
|
|
12
|
+
EigenMatrix TangentProjection(EigenMatrix A) const override;
|
|
13
|
+
EigenMatrix TangentPurification(EigenMatrix A) const override;
|
|
14
|
+
|
|
15
|
+
//EigenMatrix TransportTangent(EigenMatrix X, EigenMatrix Y) override const;
|
|
16
|
+
EigenMatrix TransportManifold(EigenMatrix X, Manifold& N) const override;
|
|
17
|
+
|
|
18
|
+
void Update(EigenMatrix p, bool purify) override;
|
|
19
|
+
void getGradient() override;
|
|
20
|
+
void getHessian() override;
|
|
21
|
+
|
|
22
|
+
std::unique_ptr<Manifold> Clone() const override;
|
|
23
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class HessUpdate{ public:
|
|
2
|
+
int Size = 0;
|
|
3
|
+
bool Verbose = 1;
|
|
4
|
+
std::vector<std::unique_ptr<Manifold>> Ms;
|
|
5
|
+
std::vector<std::map<std::string, EigenMatrix>> Caches; // For matrix-free
|
|
6
|
+
std::vector<std::tuple<double, EigenMatrix>> EigenPairs; // For non-matrix-free
|
|
7
|
+
std::function<double (double)> CautiousThreshold = [](double gnorm){ return -gnorm; };
|
|
8
|
+
HessUpdate(int n);
|
|
9
|
+
void Append(Manifold& M, EigenMatrix Step);
|
|
10
|
+
virtual void AdmittedAppend(Manifold& M, EigenMatrix Step);
|
|
11
|
+
EigenMatrix Hessian(EigenMatrix v);
|
|
12
|
+
virtual EigenMatrix HessianMatrixFree(EigenMatrix v);
|
|
13
|
+
void Clear();
|
|
14
|
+
virtual ~HessUpdate() = default;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
class BroydenFletcherGoldfarbShanno: public HessUpdate{ public:
|
|
18
|
+
BroydenFletcherGoldfarbShanno(int n): HessUpdate(n){}
|
|
19
|
+
void AdmittedAppend(Manifold& M, EigenMatrix Step) override;
|
|
20
|
+
EigenMatrix HessianMatrixFree(EigenMatrix v) override;
|
|
21
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class TruncatedConjugateGradient{ public:
|
|
2
|
+
Manifold* M;
|
|
3
|
+
std::function<EigenMatrix (EigenMatrix)>* Func;
|
|
4
|
+
bool Verbose;
|
|
5
|
+
bool ShowTarget;
|
|
6
|
+
double Radius;
|
|
7
|
+
std::function<bool (double, double, double, double)> Tolerance;
|
|
8
|
+
std::vector<std::tuple<double, EigenMatrix, EigenMatrix>> Sequence; // Step size, S, P.
|
|
9
|
+
TruncatedConjugateGradient(){};
|
|
10
|
+
TruncatedConjugateGradient(
|
|
11
|
+
Manifold* m, std::function<EigenMatrix (EigenMatrix)>* func,
|
|
12
|
+
bool verbose, bool showtarget
|
|
13
|
+
): M(m), Func(func), Verbose(verbose), ShowTarget(showtarget){};
|
|
14
|
+
void Run();
|
|
15
|
+
std::tuple<double, EigenMatrix> Find(); // Step size, S.
|
|
16
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class TrustRegionSetting{ public:
|
|
2
|
+
double R0;
|
|
3
|
+
double RhoThreshold;
|
|
4
|
+
std::function<double (double, double, double)> Update;
|
|
5
|
+
TrustRegionSetting();
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
bool TrustRegion(
|
|
9
|
+
std::function<
|
|
10
|
+
std::tuple<
|
|
11
|
+
double,
|
|
12
|
+
EigenMatrix,
|
|
13
|
+
std::function<EigenMatrix (EigenMatrix)>
|
|
14
|
+
> (EigenMatrix, int)
|
|
15
|
+
>& func,
|
|
16
|
+
TrustRegionSetting& tr_setting,
|
|
17
|
+
std::tuple<double, double, double> tol,
|
|
18
|
+
double tcg_tol,
|
|
19
|
+
int recalc_hess, int max_iter,
|
|
20
|
+
double& L, Manifold& M, int output);
|
|
21
|
+
|
|
22
|
+
bool TrustRegionRationalFunction(
|
|
23
|
+
std::function<
|
|
24
|
+
std::tuple<
|
|
25
|
+
double,
|
|
26
|
+
EigenMatrix,
|
|
27
|
+
std::function<EigenMatrix (EigenMatrix)>
|
|
28
|
+
> (EigenMatrix, int)
|
|
29
|
+
>& func,
|
|
30
|
+
TrustRegionSetting& tr_setting,
|
|
31
|
+
std::tuple<double, double, double> tol,
|
|
32
|
+
int recalc_hess, int max_iter,
|
|
33
|
+
double& L, Manifold& M, int output);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Maniverse
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|