SupportRenumbering makeBandedSimulatedAnnealing(const std::vector<SNPSupport>& supports, SupportRenumbering start, int iterations, double temperature, double temperatureMultiplier) { SupportRenumbering best = start; double bestEnergy = getEnergy(renumberSupports(supports, best)); SupportRenumbering current = best; double currentEnergy = bestEnergy; std::mt19937 mt {(size_t)std::chrono::system_clock::now().time_since_epoch().count()}; std::uniform_real_distribution<double> changeCurrent {0, 1}; for (int i = 0; i < iterations; i++) { SupportRenumbering newRenumbering = getNeighbor(current, supports); assert(newRenumbering.checkValidity()); double newEnergy = getEnergy(renumberSupports(supports, newRenumbering)); if (newEnergy < bestEnergy) { best = newRenumbering; bestEnergy = newEnergy; std::cerr << "iteration " << i << " new best " << bestEnergy << "\n"; } if (changeCurrent(mt) < std::min(1.0, exp((currentEnergy-newEnergy)/temperature))) { current = newRenumbering; currentEnergy = newEnergy; } temperature *= temperatureMultiplier; } return best; }
void manager::showTreeGame() { std::cout << "showTreeGame()" << std::endl; // std::string out = tree_.Print(); if (gameTreeView) { gameTreeView->raise(); gameTreeView->activateWindow(); return; } //create new window // std::string out = tree_.Print(); std::cout << "GTREE" << std::endl << tree_.Print() << std::endl << "END" << std::endl; gameTreeView = new GAME_View(tree_); // connect(); // connect(); connect(this, SIGNAL(movePlayed()), gameTreeView, SLOT(updateTree())); connect(gameTreeView, SIGNAL(moveChanged()), this, SLOT(changeCurrent())); connect(gameTreeView, SIGNAL(finished(int)), this, SLOT(closeTreeGame())); gameTreeView->show(); }
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: changeCurrent((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break; default: ; } _id -= 1; } return _id; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QStandardItemModel *model = new QStandardItemModel(7, 4, this); for (int row = 0; row < 7; ++row) { for (int column = 0; column < 4; ++column) { QStandardItem *item = new QStandardItem(QString("%1") .arg(row * 4 + column)); model->setItem(row, column, item); } } tableView = new QTableView; tableView->setModel(model); setCentralWidget(tableView); // 获取视图的项目选择模型 QItemSelectionModel *selectionModel = tableView->selectionModel(); // 定义左上角和右下角的索引,然后使用这两个索引创建选择 QModelIndex topLeft; QModelIndex bottomRight; topLeft = model->index(1, 1, QModelIndex()); bottomRight = model->index(5, 2, QModelIndex()); QItemSelection selection(topLeft, bottomRight); // 使用指定的选择模式来选择项目 selectionModel->select(selection, QItemSelectionModel::Select); ui->mainToolBar->addAction(tr("当前项目"), this, SLOT(getCurrentItemData())); ui->mainToolBar->addAction(tr("切换选择"), this, SLOT(toggleSelection())); connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelection(QItemSelection,QItemSelection))); connect(selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(changeCurrent(QModelIndex,QModelIndex))); // 多个视图共享选择 tableView2 = new QTableView; tableView2->setWindowTitle("tableView2"); tableView2->resize(400, 300); tableView2->setModel(model); tableView2->setSelectionModel(selectionModel); tableView2->show(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle("Selected items in a table model"); model = new TableModel(8, 4, this); table = new QTableView(this); table->setModel(model); selectionModel = table->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelection(QItemSelection,QItemSelection))); connect(selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(changeCurrent(QModelIndex,QModelIndex))); statusBar(); setCentralWidget(table); }