프로그래밍/언리얼엔진

개인 작업-1-

하바사 2025. 3. 22. 23:34

파이썬 코드 (Test) C++로 변환

!pip install m2cgen 

from sklearn.ensemble import RandomForestClassifier
import m2cgen as m2c
import numpy as np

# 입력 상태값 (예: 3개의 피처)
X = np.array([
    [0.1, 0.5, 0.2],
    [0.7, 0.8, 0.1],
    [0.3, 0.2, 0.9],
])
# 정답 (정수형)
y = [42, 8, 120]

# 모델 학습
model = RandomForestClassifier(n_estimators=10, max_depth=5)
model.fit(X, y)

# 모델을 C++ 코드로 export
cpp_code = m2c.export_to_c(model)

# Colab 상에서 파일로 저장
with open("/content/ActionPredictor.cpp", "w") as f:
    f.write(cpp_code)

from google.colab import files
files.download("/content/ActionPredictor.cpp")

 

 

void add_vectors(double *v1, double *v2, int size, double *result) {
    for(int i = 0; i < size; ++i)
        result[i] = v1[i] + v2[i];
}
void mul_vector_number(double *v1, double num, int size, double *result) {
    for(int i = 0; i < size; ++i)
        result[i] = v1[i] * num;
}
void score(double * input, double * output) {
    double var0[3];
    double var1[3];
    double var2[3];
    double var3[3];
    double var4[3];
    double var5[3];
    double var6[3];
    double var7[3];
    double var8[3];
    double var9[3];
    double var10[3];
    if (input[1] <= 0.6500000059604645) {
        memcpy(var10, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var10, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    }
    double var11[3];
    if (input[1] <= 0.6500000059604645) {
        memcpy(var11, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var11, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    }
    add_vectors(var10, var11, 3, var9);
    double var12[3];
    if (input[0] <= 0.20000000670552254) {
        memcpy(var12, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var12, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
    }
    add_vectors(var9, var12, 3, var8);
    double var13[3];
    if (input[2] <= 0.5499999895691872) {
        memcpy(var13, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var13, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
    }
    add_vectors(var8, var13, 3, var7);
    double var14[3];
    if (input[0] <= 0.20000000670552254) {
        memcpy(var14, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        if (input[2] <= 0.4999999888241291) {
            memcpy(var14, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
        } else {
            memcpy(var14, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
        }
    }
    add_vectors(var7, var14, 3, var6);
    double var15[3];
    if (input[1] <= 0.5000000074505806) {
        memcpy(var15, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
    } else {
        memcpy(var15, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    }
    add_vectors(var6, var15, 3, var5);
    double var16[3];
    if (input[0] <= 0.3999999947845936) {
        memcpy(var16, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var16, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    }
    add_vectors(var5, var16, 3, var4);
    double var17[3];
    if (input[0] <= 0.20000000670552254) {
        memcpy(var17, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var17, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
    }
    add_vectors(var4, var17, 3, var3);
    double var18[3];
    if (input[2] <= 0.15000000223517418) {
        memcpy(var18, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    } else {
        if (input[0] <= 0.20000000670552254) {
            memcpy(var18, (double[]){0.0, 1.0, 0.0}, 3 * sizeof(double));
        } else {
            memcpy(var18, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
        }
    }
    add_vectors(var3, var18, 3, var2);
    double var19[3];
    if (input[2] <= 0.4999999888241291) {
        memcpy(var19, (double[]){1.0, 0.0, 0.0}, 3 * sizeof(double));
    } else {
        memcpy(var19, (double[]){0.0, 0.0, 1.0}, 3 * sizeof(double));
    }
    add_vectors(var2, var19, 3, var1);
    mul_vector_number(var1, 0.1, 3, var0);
    memcpy(output, var0, 3 * sizeof(double));
}