Gitrend
🚀

線形最適化の超新星!HiGHSがヤバい!

C++ 2026/2/4
Summary
皆さん、線形最適化で頭を抱えてませんか? 今回紹介するHiGHSは、その悩みを一瞬で吹き飛ばす超強力ツール! マジで速度が段違い!これ、使わない手はないっしょ!

概要:なにこれ凄い?

うおおお!GitHubトレンドを漁ってたら、とんでもないブツを見つけちゃいましたよ!それがこのERGO-Code/HiGHS!線形最適化ソルバーって聞くと、なんかお堅いイメージあるじゃないですか?でもね、こいつは違う!C++でガチガチに最適化されたバックエンドが、もうバッキバキに問題を解きまくるんですよ!僕、正直言ってここまでパフォーマンスと機能性を両立させたオープンソースのソルバーって、なかなかないと思ってます。大規模な最適化問題にぶつかるたびに「あー、また時間かかるなー」って思ってたのが、HiGHSのおかげで「え、もう終わったの!?」ってなるレベル!これはエンジニアとして感動モノですよ!

ここが推し!

サクッと試そう(使用例)

#include "Highs.h"
#include <vector>
#include <iostream>

// コンパイルは、例えばHighsライブラリをビルド後、
// g++ your_code.cpp -o your_app -I/path/to/highs/include -L/path/to/highs/lib -lhighs
// のように行います。詳細はHighsのREADMEをチェックしてくださいね!

int main() {
    Highs highs;

    // 最適化モデルを定義するぞ!
    // 問題設定: max 2x + 3y
    // s.t. x + y <= 10
    //      x, y >= 0

    HighsModel model;
    model.lp_.num_col_ = 2; // 変数x, y
    model.lp_.num_row_ = 1; // 制約x+y<=10

    model.lp_.col_cost_.push_back(2.0); // xの目的関数係数
    model.lp_.col_cost_.push_back(3.0); // yの目的関数係数

    model.lp_.col_lower_.push_back(0.0); // x >= 0
    model.lp_.col_lower_.push_back(0.0); // y >= 0
    model.lp_.col_upper_.push_back(highs.kHighsInf()); // x <= infinity
    model.lp_.col_upper_.push_back(highs.kHighsInf()); // y <= infinity

    model.lp_.row_lower_.push_back(-highs.kHighsInf()); // -infinity <= x+y
    model.lp_.row_upper_.push_back(10.0); // x+y <= 10.0

    // 行列Aの非ゼロ要素 (x+y <= 10 の係数)
    model.lp_.a_start_.push_back(0); // Col 0 (x) starts at index 0
    model.lp_.a_index_.push_back(0); // Col 0, Row 0
    model.lp_.a_value_.push_back(1.0); // Value A[0,0] = 1 (for x)

    model.lp_.a_start_.push_back(1); // Col 1 (y) starts at index 1
    model.lp_.a_index_.push_back(0); // Col 1, Row 0
    model.lp_.a_value_.push_back(1.0); // Value A[0,1] = 1 (for y)

    model.lp_.a_start_.push_back(2); // End of columns

    model.lp_.sense_ = ObjSense::kMaximize; // 最大化問題!

    highs.setModel(model); // モデルを設定して
    highs.run(); // 実行!うおおおお!

    HighsSolution solution = highs.getSolution();
    std::cout << "Optimal objective value: " << highs.getObjectiveValue() << std::endl;
    std::cout << "x = " << solution.col_value[0] << std::endl;
    std::cout << "y = " << solution.col_value[1] << std::endl;

    return 0;
}

ぶっちゃけ誰向け?

まとめ

いやー、HiGHS、本当にやばいっすね!これからの線形最適化の世界を間違いなくリードしていく存在になるんじゃないかなって、僕、確信してます!オープンソースでここまでパワフルなソルバーが出てきたのは、本当に嬉しい誤算!まだ触ってないエンジニアは損してるかもよ?ぜひ皆さんもHiGHSを試して、その高速さに驚愕してほしい!僕も自分のプロジェクトにゴリゴリ活用していくぞ!今後のアップデートも楽しみだね!