mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 17:45:32 +00:00
fix
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
805443c8ab
commit
2928cc261c
1 changed files with 14 additions and 3 deletions
|
@ -33,22 +33,26 @@ namespace simplex {
|
|||
auto& mgr = M.get_manager();
|
||||
for (unsigned v = 0; v < m; ++v)
|
||||
c.push_back(0);
|
||||
|
||||
|
||||
unsigned nullity = 0, rank = 0;
|
||||
for (auto const& row : M.get_rows()) {
|
||||
// scan for non-zero variable in row
|
||||
bool found = false;
|
||||
d.push_back(0);
|
||||
++nullity;
|
||||
for (auto& [coeff1, v] : M.get_row(row)) {
|
||||
if (mpq_manager<false>::is_zero(coeff1))
|
||||
continue;
|
||||
if (c[v] != 0)
|
||||
continue;
|
||||
--nullity;
|
||||
++rank;
|
||||
d.back() = v + 1;
|
||||
c[v] = row.id() + 1;
|
||||
D = rational(-1) / coeff1;
|
||||
mgr.set(coeff1, mpq(-1));
|
||||
// eliminate v from other rows.
|
||||
for (auto& [row2, row_entry2] : M.get_rows(v)) {
|
||||
for (auto [row2, row_entry2] : M.get_rows(v)) {
|
||||
if (row.id() >= row2.id())
|
||||
continue;
|
||||
mpq & m_js = row_entry2->m_coeff;
|
||||
|
@ -59,7 +63,7 @@ namespace simplex {
|
|||
continue;
|
||||
D = m_ik;
|
||||
mgr.set(m_ik, mpq(0));
|
||||
for (auto& [row2, row_entry2] : M.get_rows(w)) {
|
||||
for (auto [row2, row_entry2] : M.get_rows(w)) {
|
||||
if (row.id() >= row2.id())
|
||||
continue;
|
||||
auto& m_js = M.get_coeff(row2, v);
|
||||
|
@ -73,6 +77,13 @@ namespace simplex {
|
|||
|
||||
mgr.del(coeff);
|
||||
|
||||
std::cout << "nullity " << nullity << "\n";
|
||||
std::cout << "rank " << rank << "\n";
|
||||
unsigned_vector pivots(rank, 0u);
|
||||
unsigned_vector nonpivots(nullity, 0u);
|
||||
|
||||
|
||||
|
||||
// TODO: extract kernel using d
|
||||
for (unsigned k = 0; k < d.size(); ++k) {
|
||||
if (d[k] != 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue