gpt4 book ai didi

java - 将分数值分配给在java范围内的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:30 24 4
gpt4 key购买 nike

我正在使用 optaplanner 库,并尝试为其提供分数。我在尝试平衡 30 个数据库对象(装箱)中的 2000 个邮箱对象的地方运行了所有内容。

optaplanner 根据邮箱大小及其在数据库中占用的空间计算得出的分数在数据库之间移动邮箱。

我认为获得分数的最佳方法是查明数据库中用掉了多少空间,如果它在 200GB 到 220GB 之间,则将分数提高 1。如果高于或低于减 1。

但是在观看调试过程后,我发现我需要更细化,可能低至 1GB。

我面临着很多 if 语句或可能 switch 的问题(但可能不是因为我需要使用最终静态变量)

问题是:

是否有模式或库可以根据范围对我进行评分?

这是我的相关代码:

public HardSoftScore calculateScore(MailboxToDatabase mailboxToDatabase) {
int hardScore = 0;
int softScore = 0;

int l0 = 229001;
int u0 = 10000000;

int l1 = 180001;
int u1 = 229000;

int l2 = 150001;
int u2 = 180000;

int l3 = 140001;
int u3 = 150000;

int l4 = 130001;
int u4 = 140000;

int l5 = 120001;
int u5 = 130000;

int l6 = 100001;
int u6 = 120000;


int loweUsers = 66;
int highUsers = 71;

List<Database> dl = mailboxToDatabase.getDatabaseList();

// Hard constraints
// Check each database for size
for (Database d : dl) {
//System.out.println(d.getName()+" USED: "+d.getTakenSpace()+" MB: "+d.getMailboxCount() );

int value = d.getTakenSpace();
int users = d.getMailboxCount();
if (l0 <= value && value <= u0) {
hardScore = hardScore-5;
}
if (l1 <= value && value <= u1) {
hardScore = hardScore+1;
}
if (l2 <= value && value <= u2) {
hardScore = hardScore-1;
}
if (l3 <= value && value <= u3) {
hardScore = hardScore-2;
}
if (l4 <= value && value <= u4) {
hardScore = hardScore-3;
}
if (l5 <= value && value <= u5) {
hardScore = hardScore-4;
}
if (l6 <= value && value <= 0) {
hardScore = hardScore-5;
}
if (loweUsers <= users && users <= highUsers)
softScore++;
}

return HardSoftScore.valueOf(hardScore, softScore);
}

最佳答案

我不知道有任何图书馆可以按照您的要求进行操作。但是您可以通过一些更改大大加快您的编码速度:

a) 不要检查间隔。只检查左边的限制:

代替

    if (l0 <= value && value <= u0) {
hardScore = hardScore-5;
}

    if (value > MAX_LIMIT) {
// error condition here
return;
}
if (l0 <= value) { // no need to check the upper limit because it was already handled by the if above
hardScore = hardScore-5;
}

b) 使用 else 加速您的代码并避免检查该值 7 次:

代替

    if (l2 <= value && value <= u2) {
hardScore = hardScore-1;
}
if (l3 <= value && value <= u3) {
hardScore = hardScore-2;
}

    if (l2 <= value) {
hardScore = hardScore-1;
}
else if (l3 <= value) {
hardScore = hardScore-2;
}

关于java - 将分数值分配给在java范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com