0

を使用してプログラムを呼び出すときに、minisat のランダム化されたパラメーターをいくつか試してみましたsystem()。私はこれまでにこのようなことをしたことがなく、かなり迷っていることを認めなければなりません.

たとえば、次のようにできます。

system("minisat -luby -rinc=1.5 <dataset here>")

-lubyまたはの値を-no-lubyランダム化するにはどうすればよいですか?1.5-rinc

4

3 に答える 3

1

system は、C スタイルの文字列をパラメーターとして受け取る通常の関数にすぎません。文字列は自分で作成できます。

bool luby = true;
double rinc = 1.5;
system((std::string("minisat -")+(luby?"luby":"no-luby")+" -rinc="+std::to_string(rinc)).c_str());
于 2016-09-03T01:35:51.810 に答える
0

変数を使用してコマンドを動的に構築する必要があります。

bool luby = true;  // if you want -no-luby, set it to be false
double rinc = 1.5;  // set it to be other values

char command[1024];
std::string luby_str = (luby ? "luby" : "no-luby");
std::snprintf(command, sizeof(command), "minisat -%s -rinc=%f", luby_str.c_str(), rinc);
system(command);

@RemyLebeau が指摘しているように、C++ スタイルの方が優れているはずです。

std::string command;
std::ostringstream os;
os << "minisat -" << luby_str << " -rinc=" << rinc;
system(command.c_str());
于 2016-09-03T01:21:56.163 に答える
0

ここでは、次のようなランダム文字列コマンド ジェネレーターを使用して、ランダム化されたコマンドを作成できます。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <random>
#include <string>

std::string getCommand()
{
    std::string result = "minisat ";
    srand(time(0));
    int lubyflag = rand() % 2; //Not the best way to generate random nums
                               //better to use something from <random>
    if (lubyflag == 1)
    {
        result += "-luby ";
    } else 
    {
        result += "-no-luby ";
    }
    double lower_bound = 0; //Now were using <random>
    double upper_bound = 2; //Or whatever range 
    std::uniform_real_distribution<double> unif(lower_bound,upper_bound);
    std::default_random_engine re;
    double rinc_double = unif(re);
    result += "-rinc=" + rinc_double;
    return result;
}
int main()
{
    std::string command = getCommand();
    system(command.c_str());
}

すべてのコントロールが必要な場合は、次のようにします。

bool flaga = false;
double valueb = 1.5;
system(std::string("ministat " + ((flaga) ? "-luby " : "-no-luby ") + 
    "rinc= " + std::to_string(valueb)).c_str());
于 2016-09-03T01:40:53.410 に答える