双点医院吧 关注:14,374贴子:47,802

关于诊断率和治疗率的计算公式,来自反编译源码

只看楼主收藏回复

治疗:
public struct TreatmentCalculationBreakdown
{
public float ChanceOfSuccess; //治疗成功率,取决于下面的各种因素
public float DiagnosisCertainty; //诊断率
public float StaffSkill; //医生\护士治疗技能,等于病人治疗成功率界面的“员工技能”
//房间加成,包括仪器(升级)+药柜,等于病人治疗成功率界面的“升级”/2
public float RoomModifiers;
// 最小治疗成功率,取决于疾病类型, = 100% - 疾病难度
public float MinTreatmentEffectiveness;
public float MaxTreatmentEffectiveness; //最大治疗成功率,取决于疾病类型
}
成功率 = 诊断率x(最小成功率 + (最大成功率-最小成功率)x(min(100%,医生技能+房间加成))
最小成功率 = 100% - 疾病难度
房间加成 = 显示的“升级”数值/2
min(a,b)等于取a和b里的最小值,也就是“医生技能+房间加成”最大为100%,溢出的部分不算。
例:诊断率100%, 疾病难度60%, 最大成功率100%,医生技能50%,界面显示的房间加成50%,则
最小成功率 = 100% - 60% = 40%
房间加成 = 50/2 = 25
医生技能+房间加成 = 50+25 = 75
最终治疗成功率 = 100%x(40% + (100%-40%)x75%) =40% + 45% = 85%, 有时候这里会-1,也就是84%.
几个结论:
1,治疗会溢出,如果房间能堆到最大100/2 = 50(升级仪器或堆药柜),那么技能只要50就行了,LV5白板就50,心情加成还有10,对于药房来说仪器+50,护士学个专用技能+20,再升个两级就堆满了,技能栏可以拿去填别的。病房LV5+2专用技能+10个药柜,可以省出3个技能槽学别的,不堆药柜就学3专用技能。
2,最大成功率如果是100%(没找到来源,默认是100),那么最大成功率-最小成功率=100-最小成功率=疾病难度,公式可以简化为:
诊断率x((100%-疾病难度)+疾病难度*min(100%, 医生技能+房间加成))
也就是诊断率x((100%-疾病难度)+疾病难度*(医生技能+房间加成)), 其中医生技能+房间加成最大100%
诊断:
public struct DiagnosisCalculationBreakdown
{
public float Certainty; // 最终诊断率,由下面这些因素共同决定
public float Illness; // 基础诊断率,取决于疾病类型和诊断房间类型,有些疾病在特定诊断房间效果好,最低10%。
public float RoomMultiplier; // 房间加成,包括家具。
public float ItemMultiplier; // 病人和某个道具交互,得到的加成???? 不确定
public float RevistGP; // 第2次及以后重返全科诊断室的加成,
public float UpgradeMultiplier; // 科研加成
public float StaffMultiplier; // 护士\医生加成
}
公式很简单,把所有因素累乘:
Certainty = Illness * RoomMultiplier * ItemMultiplier * RevistGP * UpgradeMultiplier * StaffMultiplier
每进行一次新诊断,计算Certainty,和之前进行过的累加。
几个结论:
1,诊断技能不会溢出
2,如果有多个不同房间都可以进行诊断,会优先选择诊断率增加最高的
3,1-2-1三次诊断对有些病可能是无法避免的,那么是否有必要全科诊断技能5就见仁见智。
4,诊断加价会在每次诊断时减病人心情,所以便宜的诊断就别加价了,医生天赋和技能可以加心情,可以考虑堆一些技能到价格加倍也可以+心情。


IP属地:浙江1楼2018-09-18 21:36回复
    @shibucheng 🐮🍺


    IP属地:浙江来自Android客户端2楼2018-09-18 21:40
    回复(4)
      2025-08-22 02:09:31
      广告
      不感兴趣
      开通SVIP免广告
      补充一下,治疗成功率<=0时必死,>=100时必成功。位于两者之间时先判断治疗是否成功:
      1,基础概率 = 成功率
      2,对基础概率进行修正,每次治疗成功会减少下一次的成功率,每次治疗失败会增加下一次的成功率,这样保证了不会总是成功,也不会总是失败。
      治疗失败后,有概率死亡:
      1,疾病类型决定基础死亡概率
      2,同样的方法进行概率修正,保证不会总是死,也不会总是不死。


      IP属地:浙江3楼2018-09-18 21:58
      回复(2)
        诊断率有确切公式吗


        来自Android客户端4楼2018-09-18 22:17
        回复
          技术贴


          IP属地:安徽来自Android客户端5楼2018-09-18 22:39
          回复
            优先选择诊断率提升最高的去诊断,这就是为什么造了核磁就不如体液了,另外有些疾病在专科诊断率更高,所以病房,精神科,DNA这些诊治一体的还是会有人去排队诊断的


            IP属地:湖北来自iPhone客户端6楼2018-09-19 11:01
            回复
              选诊室的具体过程:
              1,先选出候选诊室队列:从所有已建立的诊室中选,每类型选一个。如果同一类型有多个,那么选择打分最低的那个(最好的),打分取决于排队长度+距诊室(门)距离+诊室员工是否满员+诊室是否开放,队伍长、距离远、没有满员、没开放都会加分(分越高越差)。
              2,如果已经访问过一次,就不再访问,从候选列表中删除。
              3,从剩下的候选诊室列表里,按下面的规则进行筛选,选择一个去访问:
              public static Room GetNextDiagnosisRoom(List<Room> rooms, Patient patient, Staff staff, ResearchManager researchManager)
              {
              if (rooms.Count == 0)
              {
              return null;
              }
              rooms.Shuffle(RandomUtils.GlobalRandomInstance); //乱序排列,似乎没什么意义,因为下面要排序
              //按诊断效果从大到小排序 ,即降序排列
              rooms.Sort(delegate(Room lhs, Room rhs) {
              float certainty = GameAlgorithms.GetDiagnosisCertainty(patient, lhs, staff, researchManager).Certainty;
              float certainty2 = GameAlgorithms.GetDiagnosisCertainty(patient, rhs, staff, researchManager).Certainty;
              if (certainty < certainty2)
              {
              return 1;
              }
              if (certainty > certainty2)
              {
              return -1;
              }
              return 0;
              });
              //随机选索引
              int num = RandomUtils.GlobalRandomInstance.Next(0, staff.RankDefinition.FurtherDiagnosisChoiceCount );
              //从队列里选取索引指向的诊室,如果索引超出了队列范围,则选择队列里最后一个。
              return (num < rooms.Count) ? rooms[num] : rooms[rooms.Count - 1];
              }
              这里的问题在于RandomUtils.GlobalRandomInstance.Next(0, staff.RankDefinition.FurtherDiagnosisChoiceCount );,这是产生一个[0, staff.RankDefinition.FurtherDiagnosisChoiceCount]中的随机整数,作为诊室候选列表的索引,比如索引0表示列表中的第一个,1表示第2个,5表示第6个,但是这里的FurtherDiagnosisChoiceCount似乎是一个常量1(虽然从名字看是和员工等级相关的一个值),也就是随机[0,1),结果永远等于0,也就是永远选择候选队列里的第一个,也就是诊断效果最好的。


              IP属地:浙江7楼2018-09-19 15:40
              回复(1)
                那么问题来了,诊断房间需要堆药柜么


                IP属地:湖南8楼2018-09-19 16:11
                收起回复
                  2025-08-22 02:03:31
                  广告
                  不感兴趣
                  开通SVIP免广告
                  有确切公式,可以研究最佳科室和人员配置了


                  IP属地:广西来自Android客户端9楼2018-09-19 18:58
                  回复
                    基础诊断率可以在哪查看?诊断减价能额外加心情吗?


                    来自手机贴吧11楼2018-09-19 23:40
                    回复(4)
                      感觉堆药柜后不需要5全科,4+1体力比较合算


                      IP属地:北京来自iPhone客户端12楼2018-09-20 21:54
                      收起回复
                        struct看到了,计算公式在哪里


                        IP属地:湖南13楼2018-09-25 00:38
                        回复
                          机器和药柜的加成要除以2来计算么?


                          IP属地:浙江来自iPhone客户端14楼2018-09-29 00:42
                          回复
                            我没有公式来计算那么多,都是手动尝试
                            首先医生的诊断初始值有不一样的,满级医生有诊断率130%和140%两种,加强15%*5的全科技能,最高达到215%的诊断率。但是这看起来很高,实际诊断率不高,因为不同疾病有不同的难度。
                            实际尝试了一下,一个全科堆220个药柜,配初始140%诊断,5级全科的医生,可以一次确诊难度80的疾病。
                            这意味着,95%以上的病人去一次全科就可以滚去治疗了,其他所有的诊断科室都可以不要。


                            来自iPhone客户端15楼2018-10-01 11:36
                            收起回复
                              2025-08-22 01:57:31
                              广告
                              不感兴趣
                              开通SVIP免广告
                              我倒是看明白了一个事情 有些病不管医院再好还是会死人的 比如巨型DNA(难度70我没记错吧?)那个治疗公式在诊断100治疗100下就是成功率=最大治愈率 最大治愈率不是100那该死的是神仙都救不活


                              IP属地:山东来自Android客户端16楼2018-10-29 14:33
                              回复