You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求结合买卖成本与交易量的游戏市场最优盈利产品算法

SkyBlock 游戏内市场最优盈利产品筛选方案求助

我正在开发一款SkyBlock游戏内的市场产品评估工具,核心功能是帮玩家筛选适合低买高卖的产品。目前用到的参数包括:

  • buy_summary、sell_summary:当前买卖方向的前30笔订单数据
  • quick_status:产品实时状态汇总,包含以下字段:
    • sellVolume/buyVolume:对应交易方向的所有订单物品总量
    • sellPrice/buyPrice:按交易量加权的前2%订单均价
    • buyMovingWeek/sellMovingWeek:近7天+实时的历史交易量总和
    • sellOrders/buyOrders:活跃订单数量

我之前尝试的计算逻辑如下:

  1. 计算sellAvailability和buyAvailability:用sellMovingWeek/7除以sellVolume,buyMovingWeek/7除以buyVolume,以此代表订单清空所需时长
  2. 根据用户可用资金计算可购买数量,进而算出总成本、总售价和利润
  3. 对可用性相关指标和利润做归一化处理,通过可用性差值、可用性均值和利润的加权平均计算产品得分

但这套方法有个硬伤——哪怕反复调整权重,还是会出现高分产品实际亏损的情况。我不是经济学专业出身,希望能得到结合买卖交易量的最优盈利产品筛选算法。以下是我目前的Java代码:

private void calculateButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                
        float money;
        int amount;
        //获取资金和数量值,若格式错误则设为0
        try{
            money = Float.parseFloat(moneyField.getText());
        } catch(NumberFormatException e){
            moneyField.setText(0+"");
            money = 0;
        }

        try {
            amount = Integer.parseInt(amountCombo.getSelectedItem().toString());
        } catch(NumberFormatException e){
            amountCombo.setSelectedItem(0+"");
            amount = 0;
        }
        
        //计算步骤:
        //1) 计算可购买数量并限制在设定值内
        //2) 用限制后的数量乘以买入价得到总成本
        //3) 用限制后的数量乘以卖出价得到总售价
        //4) 计算利润
        //5) 找出最大利润值
        //5.2) 找出最大可用性差值和最大可用性均值
        //6) 计算可用性差值并取反向值
        //7) 计算可用性均值
        //8) 归一化所有指标值
        //9) 计算产品得分
        double maxRevenue = 0;
        double maxDifference = 0;
        double maxAverage = 0;
        double[] revenue = new double[tabla.length];
        //遍历计算利润并记录最大值
        for(int i = 0; i<tabla.length; i++){
            //1) 计算可购买数量并限制在设定值内
            int buyingAmount = calculateAmountAndClamp(amount, money, Float.parseFloat(tabla[i][2].toString()));
            //2) 计算总成本
            double buyingCost = buyingAmount*(Double.parseDouble(tabla[i][2].toString()));
            //3) 计算总售价
            double sellingCost = buyingAmount*(Double.parseDouble(tabla[i][4].toString()));
            //4) 计算利润
            revenue[i] = sellingCost-buyingCost;
            //5) 更新最大利润值
            maxRevenue = Math.max(maxRevenue, revenue[i]);
            //5.2) 更新最大可用性差值和最大可用性均值
            maxDifference = Math.max(maxDifference, Math.abs(Double.parseDouble(tabla[i][1].toString())-Double.parseDouble(tabla[i][3].toString())));
            maxAverage = Math.max(maxAverage, (Double.parseDouble(tabla[i][1].toString())+Double.parseDouble(tabla[i][3].toString())/2));
        }
        //遍历计算可用性差值、均值,归一化后计算得分
        for (int i = 0; i < tabla.length; i++) {
            //6) 计算可用性差值并取反向值
            double difference = Math.abs(Double.parseDouble(tabla[i][1].toString())-Double.parseDouble(tabla[i][3].toString()));
            difference = maxDifference-difference;
            //7) 计算可用性均值
            double average = (Double.parseDouble(tabla[i][1].toString())+Double.parseDouble(tabla[i][3].toString()))/2.;
            //8) 归一化指标值
            System.out.println("\nDifference: "+difference+" Average: "+average+" Profit: "+revenue[i]);
            difference = scaleValue(difference, maxDifference, maxRevenue);
            average = scaleValue(average, maxAverage, maxRevenue);
            
            //9) 计算产品得分
            tabla[i][5]=difference*availabilityDiffereneWeight+average*availabilityAverageWeight+revenue[i]*profitWeight;
            System.out.println("Difference: "+difference+" Average: "+average+" Profit: "+revenue[i]+"Score: "+tabla[i][5]+"\n");
        }
}

内容的提问来源于stack exchange,提问作者EustakiosPower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:49:49