R3.5.1でスコアアタックイベントの期待値を計算する (v1.1)

2019/4/18

【入力】
name series rare slv col sh be me skill skill2 times prob score score2 speyuki riha 5 4 me 4352 3773 6696 score com 16 0.44 3034 0 0.1yuki do 4 2 me 3975 3574 6280 score per 22 0.39 1172 0 0.02yuki okashi 4 3 me 3975 3398 6314 shrink per 24 0.36 1.4 4 0.02yuki head 5 5 me 4203 3755 7024 score timer 11 0.44 6190 0 0.02
キャラ名、シリーズ名、レアリティ(使わない)、スキルレベル(使わない)、属性、属性値×3、スキル種(スコアアップ、縮小、それ以外)、スキル発動条件(コンボ/パーフェクト/タイマー)、スキルが発動するコンボ数/パーフェクト数/秒数、スキル発動確率、スキル発動時の値/倍率(縮小時)、スキル継続時間(縮小時)、イベント特効倍率
【変数】per = 550 #曲のパーフェクト数good = 50 #曲のグッド数com = per+good #コンボ数sec = 120 #曲の時間mv = 200 #MV中のノーツ数batch = 1.1 #スコアアップバッチの倍率ass = T #スコアアップライブアシストの有無
【スキル計算】skill_cal <- function (card, base) { switch (as.character(card$skill2), “per” = assign(“count”, per), “com” = assign(“count”, com), assign (“count”,sec)) if (card$skill==“score”) { return (count/card$timescard$probcard$score) } else if (card$skill==“shrink”) { return (count/card$timesbase(0.025*(per/sec)+0.020*(good/sec))* card$score2*(card$score-1)) } else { return (0) }}
【スコア計算】score_cal <- function (unit, col, friend) { spe <- 1+sum(unit$spe) cent <- ifelse(friend==T, ifelse(unit$col[1]==unit$col[6], 1.2, 1.1), 1.1) base <- sum(unit[,5+col])+ ifelse (is.na(match(“head”, unit$series)), 0, 500*(sum(unit$name==“yuki”))) base <- ifelse (ass==T, base1.2, base) base <- centbase*(501.0+501.1+501.2+501.3+501.4+(com-250-mv)1.5+ good(mv/com)1.5+per(mv/com)21.5)/com unit_skill <- NULL for (i in 1:nrow(unit)) { unit_skill <- c(unit_skill, skill_cal(unit[i,],base)) } score <- base(0.025per+0.020good)+sum(unit_skill) return(scorebatchspe)}
【入力したデータの中から最もスコア値の高いユニットを導く】score_max <- function (data,color){ data_2 <- subset(data,col==c(“sh”,“be”,“me”)[color]) combination <- combn (data_2$id,5) score_data <- numeric(ncol(combination)) for (i in 1:ncol(combination)){ data_temp <- data[combination[,i],] score_data[i] <- score_cal(data_temp,1,F) } return(list(max(score_data),which.max(score_data), data[combination[,which.max(score_data)],]))}
unit1 <- data[c(1,2,3,4,5),] #フレンドなし、1番目にセンターの行IDscore_cal (unit1, 3, F) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3unit2 <- data[c(1,2,3,4,5,6),] #フレンドあり、1番目にセンター、6番目にフレンドの行ID
score_cal (unit1, 3, T) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3
score_max(data,1) #2個目の変数は曲の色でシャウト=1、ビート=2、メロディー=3
おめでとうございます
仮定・フルコンボ・ノーツはすべて白・センタースキルは110%アップ固定・自分のセンターは曲の色と同じ、フレンドのセンターは他の色でもいい・50コンボでランプ1つ点灯、MVは最後まで続く・ブローチスキルはヘッドホンつけたユキしか使えない(ユキしか育ててないから)

更新履歴19/6/13 v1.1 スコア計算関数のフレンドの有無を変数に追加、最大スコア値計算関数の追加
ありがとうございましたhttp://nomnaim.main.jp/wiki/idolish7/index.php?%E3%82%B9%E3%82%B3%E3%82%A2%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF