{"id":15143,"date":"2023-02-14T11:43:30","date_gmt":"2023-02-14T11:43:30","guid":{"rendered":"http:\/\/141.23.68.248\/wp\/?page_id=15143"},"modified":"2023-02-14T11:43:30","modified_gmt":"2023-02-14T11:43:30","slug":"r-code-group-b","status":"publish","type":"page","link":"http:\/\/141.23.68.248\/wp\/?page_id=15143","title":{"rendered":"R code ( Group B)"},"content":{"rendered":"<p>rm (list = ls())<\/p>\n<p>library(timelineS)<br \/>\nlibrary(lubridate)<br \/>\nlibrary(ggplot2)<br \/>\nlibrary(dplyr)<br \/>\nlibrary(reshape2)<br \/>\nlibrary(rPref)<br \/>\nlibrary(mco)<br \/>\nlibrary(MASS)<\/p>\n<p>plot.timeline &lt;- function(lifetime, events.name, start.Date, plot.Name) {<br \/>\ndataP &lt;- data.frame(Events = events.name, Event_Dates = ymd(start.Date) +<br \/>\nyears(lifetime))<br \/>\ntimelineS(dataP, main = plot.Name,<br \/>\nlabels = events.name, label.direction = &#8220;up&#8221;, label.position = 3)<br \/>\n}<\/p>\n<p>dist.Events &lt;- function (lifetime, events, start.Date, option.Name) {<br \/>\n#sort the events<br \/>\nevents &lt;- sort(events, decreasing = T)<br \/>\n#create the distribution of the events<br \/>\ndistribution.events &lt;- sapply(events, seq, from = 0, to = lifetime)<br \/>\n#all events unlisted<br \/>\nall.events &lt;- melt(distribution.events)<br \/>\ncolnames(all.events) &lt;- c(&#8220;frequency&#8221;, &#8220;event&#8221;)<br \/>\n#sort the events ascending<br \/>\nall.events &lt;- all.events[order(all.events$frequency),]<br \/>\n#get the unique sequence of events<br \/>\nunique.events &lt;- all.events[!duplicated(all.events$frequency),]<br \/>\nunique.events$event[which(unique.events$frequency == 0)] &lt;- &#8220;DC&#8221;<br \/>\n#plot the timeline<br \/>\n#plot.timeline(unique.events$frequency, unique.events$event, start.Date, option.Name)<br \/>\nreturn(unique.events)<br \/>\n}<\/p>\n<p>combine.lifeTimelines &lt;- function(product.1, product.2, product.3, product.4,<br \/>\np1.dur, p2.dur, p3.dur, p4.dur) {<br \/>\nbase &lt;- list(Names = c(), frequency = c(), duration = c())<br \/>\nbase$frequency &lt;- sort(unique(c(product.1$frequency,<br \/>\nproduct.2$frequency,<br \/>\nproduct.3$frequency,<br \/>\nproduct.4$frequency)),<br \/>\ndecreasing = FALSE)<br \/>\nbase$Names[1] &lt;- &#8220;DC&#8221;<br \/>\nbase$duration[1] &lt;- 0<br \/>\nbase$Names[length(base$frequency)] &lt;- &#8220;END&#8221;<br \/>\nbase$duration[length(base$frequency)] &lt;- 0<\/p>\n<p>for(index in 2:(length(base$frequency) &#8211; 1)) {<\/p>\n<p>phase.1 &lt;- product.1$event[which(product.1$frequency ==<br \/>\nbase$frequency[index])]<br \/>\nphase.2 &lt;- product.2$event[which(product.2$frequency ==<br \/>\nbase$frequency[index])]<br \/>\nphase.3 &lt;- product.3$event[which(product.3$frequency ==<br \/>\nbase$frequency[index])]<br \/>\nphase.4 &lt;- product.4$event[which(product.4$frequency ==<br \/>\nbase$frequency[index])]<\/p>\n<p>list &lt;- c(phase.1, phase.2, phase.3, phase.4)<br \/>\ndist &lt;- c(p1.dur, p2.dur, p3.dur, p4.dur)<\/p>\n<p>l &lt;- c()<br \/>\nd &lt;- c(0)<\/p>\n<p>for (i in 1:length(list)){<br \/>\nif (length(list[i] != 0)){<br \/>\nl &lt;- append(l, list[i])<br \/>\nx &lt;- dist[which(names(dist) == list[i])]<br \/>\nd &lt;- append(d, x)<br \/>\n}<br \/>\nelse{<br \/>\nd &lt;- append(d, 0)<br \/>\n}<br \/>\n}<\/p>\n<p>base$Names[index] &lt;- paste(l, collapse = &#8220;&amp;&#8221;)<br \/>\nbase$duration[index] &lt;- max(d)<br \/>\n}<br \/>\nreturn(base)<br \/>\n}<\/p>\n<p>par(mfrow = c(2, 1))<br \/>\nstart.Date = &#8220;2020-01-01&#8221;<br \/>\nlifetime &lt;- 70<\/p>\n<p>events.Op1.Metro = c(RR.m = 28, M.m = 5, FER.m = 15, CS.m = 50, END=lifetime)\u00a0\u00a0 ## Re-read!!!!<br \/>\nduration.ev.Metro &lt;- c(RR.m = 7, M.m = 2, FER.m = 21)<\/p>\n<p>events.Op1.Bridge = c(SDO.b = 18, M.b = 6, DR.b = 36, END = lifetime)<br \/>\nduration.ev.Bridge &lt;- c(SDO.b = 4, M.b = 2, DR.b = 32)<\/p>\n<p>events.Op1.Building &lt;- c(SDR.bu = 15, M.bu = 10, DR.bu = 50, END = lifetime)<br \/>\nduration.ev.Building &lt;- c(SDO.bu = 5, M.bu = 6, DR.bu = 11)<\/p>\n<p>events.Op1.Water &lt;- c(PI.w = 2, M.w = 10, PR.w = 55, END = lifetime)<br \/>\nduration.ev.Water &lt;- c(PI.w = 8, M.w = 12, PR.w = 31)<\/p>\n<p>design.Options.Metro &lt;- list(desing.Op1.Metro &lt;- &#8220;Metro&#8221;)<br \/>\ndesign.Options.Bridge &lt;- list(desing.Op1.Bridge &lt;- &#8220;Bridge&#8221;)<br \/>\ndesign.Options.Building &lt;- list(desing.Op1.Building &lt;- &#8220;Building&#8221;)<br \/>\ndesign.Options.Water &lt;- list(desing.Op1.Water &lt;- &#8220;Water&#8221;)<\/p>\n<p>maintenance.Metro &lt;- dist.Events(lifetime, events.Op1.Metro, start.Date,<br \/>\ndesign.Options.Metro)<br \/>\nmaintenance.Bridge &lt;- dist.Events(lifetime, events.Op1.Bridge, start.Date,<br \/>\ndesign.Options.Bridge)<br \/>\nmaintenance.Building &lt;- dist.Events(lifetime, events.Op1.Building, start.Date,<br \/>\ndesign.Options.Building)<br \/>\nmaintenance.Water &lt;- dist.Events(lifetime, events.Op1.Water, start.Date,<br \/>\ndesign.Options.Water)<\/p>\n<p>integrated.interv &lt;- combine.lifeTimelines(maintenance.Metro, maintenance.Bridge,<br \/>\nmaintenance.Building, maintenance.Water,<br \/>\nduration.ev.Metro, duration.ev.Bridge,<br \/>\nduration.ev.Building, duration.ev.Water)<br \/>\nsum(integrated.interv$duration)<\/p>\n<p>design.explore &lt;- function(events1, events2, events3, events4) {<br \/>\nresults &lt;- c()<br \/>\nfor(i in 1: dim(events1)[1]) {<br \/>\nev1 &lt;- unlist(events1[i, ])<br \/>\ndist.1 &lt;- dist.Events(lifetime, ev1, start.Date, desing.Op1)<br \/>\ndur.ev1 &lt;- ev1\/2<br \/>\nfor (j in 1: dim(events1)[1]) {<br \/>\nev2 &lt;- unlist(events2[j, ])<br \/>\ndist.2 &lt;- dist.Events(lifetime, ev2, start.Date, design.Options.Road)<br \/>\ndur.ev2 &lt;- ev2\/2<br \/>\nfor (k in 1: dim(events1)[1]) {<br \/>\nev3 &lt;- unlist(events3[k, ])<br \/>\ndist.3 &lt;- dist.Events(lifetime, ev3, start.Date, design.Options.Road)<br \/>\ndur.ev3 &lt;- ev3\/2<br \/>\nfor (l in 1: dim(events1)[1]) {<br \/>\nev4 &lt;- unlist(events4[k, ])<br \/>\ndist.4 &lt;- dist.Events(lifetime, ev4, start.Date, design.Options.Road)<br \/>\ndur.ev4 &lt;- ev4\/2<br \/>\ncombined.lifetime &lt;- combine.lifeTimelines(dist.1, dist.2, dist.3, dist.4,<br \/>\ndur.ev1, dur.ev2, dur.ev3, dur.ev4)<br \/>\nmin.dist.int &lt;- min(abs(combined.lifetime$frequency[1:(length(combined.lifetime$frequency) &#8211; 1)] &#8211;<br \/>\ncombined.lifetime$frequency[2:length(combined.lifetime$frequency)]))<br \/>\nresults &lt;- rbind(results, c(ev1, ev2, ev3, ev4, dur = sum(combined.lifetime$duration), dist.inter = min.dist.int))<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\nreturn(as.data.frame(results))<br \/>\n}<\/p>\n<p>n.grid &lt;- 2<\/p>\n<p>events.Op1.Metro = c(RR.m = 28, M.m = 5, FER.m = 15, CS.m = 50, END=lifetime)\u00a0\u00a0 ## Re-read!!!!<br \/>\nduration.ev.Metro &lt;- c(RR.m = 7, M.m = 2, FER.m = 21)<\/p>\n<p>events.Op1.Bridge = c(SDO.b = 18, M.b = 6, DR.b = 36, END = lifetime)<br \/>\nduration.ev.Bridge &lt;- c(SDO.b = 4, M.b = 2, DR.b = 32)<\/p>\n<p>events.Op1.Building &lt;- c(SDR.bu = 15, M.bu = 10, DR.bu = 50, END = lifetime)<br \/>\nduration.ev.Building &lt;- c(SDO.bu = 5, M.bu = 6, DR.bu = 11)<\/p>\n<p>events.Op1.Water &lt;- c(PI.w = 2, M.w = 10, PR.w = 55, END = lifetime)<br \/>\nduration.ev.Water &lt;- c(PI.w = 8, M.w = 12, PR.w = 31)<\/p>\n<p>events.grid.metro &lt;- expand.grid(SDO.m = sample(seq(10,20, by = 1), n.grid),<br \/>\nM.m = sample(seq(3,8,1), n.grid),<br \/>\nDR.m = sample(seq(20, 35, 1), n.grid))<\/p>\n<p>events.grid.bridge &lt;- expand.grid(SDO.br = sample(seq(12, 25, by = 1), n.grid),<br \/>\nM.br = sample(seq(5,10,1), n.grid),<br \/>\nR.br = sample(seq(27, 37, 1), n.grid))<\/p>\n<p>events.grid.building &lt;- expand.grid(SDO.bu = sample(seq(10,20, by = 1), n.grid),<br \/>\nM.bu = sample(seq(3,8,1), n.grid),<br \/>\nDR.bu = sample(seq(20, 35, 1), n.grid))<\/p>\n<p>events.grid.water &lt;- expand.grid(SDO.w = sample(seq(12, 25, by = 1), n.grid),<br \/>\nM.w = sample(seq(5,10,1), n.grid),<br \/>\nR.w = sample(seq(27, 37, 1), n.grid))<\/p>\n<p>response.space &lt;- design.explore(events.grid.metro, events.grid.bridge, events.grid.building, events.grid.water)<\/p>\n<p>p &lt;- low(dur)* high(dist.inter)<br \/>\nsky &lt;- psel(response.space, p)<\/p>\n<p>pareto2 &lt;- psel(response.space, p, top = nrow(response.space))<\/p>\n<p>ggplot(response.space, aes(x = dur, y = dist.inter)) +<br \/>\ngeom_point(shape = 21) +<br \/>\ngeom_point(data = pareto2, size = 3, aes(color = factor(pareto2$.level)))<\/p>\n<p>show_front &lt;- function(pref) {<br \/>\nplot(response.space$dur, response.space$dist.inter)<br \/>\nsky &lt;- psel(response.space, pref)<br \/>\nplot_front(response.space, pref, col = rgb(0, 0, 1))<br \/>\npoints(sky$dur, sky$dist.inter, lwd = 3)<br \/>\n}<\/p>\n<p>show_front(p)<\/p>\n<p>p &lt;- high(dur) * low(dist.inter)<\/p>\n<p>show_front(p)<\/p>\n<p>## Metro<\/p>\n<p>LCI.materials &lt;- read.csv(&#8220;LCI_Materials-5.csv&#8221;, sep=&#8221;;&#8221;, dec=&#8221;,&#8221;)<\/p>\n<p>LCA.station &lt;- function(length, superstructure.Option, materials, dist.event) {<br \/>\nsubstructure.section &lt;- 0.506<br \/>\nconv.superstructure.section &lt;- 0.46575<br \/>\nFRP_conv.superstructure.section &lt;- 0.46575<br \/>\nprefab.superstructure.section &lt;- 0.3795<br \/>\nFRP_prefab.superstructure.section &lt;- 0.3795<br \/>\nrail.unitWeight &lt;- 54.77<\/p>\n<p>materials.split &lt;- split(materials, materials$scope)<\/p>\n<p>s &lt;- summary(as.factor(dist.event$event))<br \/>\ns2 &lt;- as.data.frame(rbind(Freq = s), stringsAsFactors = F, row.names = 1:length(s))<\/p>\n<p>if(superstructure.Option == &#8220;CRC&#8221;) {<br \/>\nsuperstructure.volume &lt;- length * conv.superstructure.section * 2 # multiplication by &#8220;2&#8221; is for each track line direction<br \/>\n}<br \/>\nelse if (superstructure.Option == &#8220;PRC&#8221;) {<br \/>\nsuperstructure.volume &lt;- length * prefab.superstructure.section * 2<br \/>\n}<br \/>\nelse if (superstructure.Option == &#8220;CFRC&#8221;) {<br \/>\nsuperstructure.volume &lt;- length * FRP_conv.superstructure.section * 2<br \/>\n}<br \/>\nelse if (superstructure.Option == &#8220;PFRC&#8221;) {<br \/>\nsuperstructure.volume &lt;- length * FRP_prefab.superstructure.section * 2<\/p>\n<p>}<\/p>\n<p>interventions.sup &lt;- s2$DC + s2$M + (if (!is.null(s2$PR)) {s2$PR} else {0}) +<br \/>\n(if (!is.null(s2$FPR)) {s2$FPR} else {0})<\/p>\n<p>substructure.volume &lt;- length * substructure.section * 2<br \/>\ninterventions.sub &lt;- s2$DC + s2$M + (if (!is.null(s2$CS)) {s2$CS} else {0})<\/p>\n<p>rail.weight &lt;- length * rail.unitWeight * 2 * 2 #multiplication by 4 is because there are 2 rail on each direction<br \/>\ninterventions.rail &lt;- s2$DC + s2$RR + s2$M + (if (!is.null(s2$FER)) {s2$FER} else {0})<\/p>\n<p>rail &lt;- mutate(materials.split$Rail, metro.Q = rail.weight, interventions = interventions.rail)<br \/>\nsuperstructure &lt;- mutate(materials.split[[superstructure.Option]], metro.Q = superstructure.volume, interventions = interventions.sup)<br \/>\nsubstructure &lt;- mutate(materials.split[[&#8220;CRC&#8221;]], metro.Q = substructure.volume, interventions = interventions.sub)<\/p>\n<p>LCA.matrix &lt;- rbind(substructure, superstructure, rail)<\/p>\n<p>LCA.matrix &lt;- mutate(LCA.matrix, TotalMaterials.Q = quantities * metro.Q \/ 1000,<br \/>\nmaterials.LC = TotalMaterials.Q * interventions,<br \/>\nEnergy.LC = materials.LC * energy,<br \/>\nCO2.LC = materials.LC * CO2 * 1000,<br \/>\nNOx.LC = materials.LC * NOX * 1000,<br \/>\nSO2.LC = materials.LC * SO2 * 1000,<br \/>\nTotalCost.LC = materials.LC * UnitPrice * 1000)<\/p>\n<p>LCA.results &lt;- list(Energy = sum(LCA.matrix$Energy.LC),<br \/>\nCO2 = sum(LCA.matrix$CO2.LC),<br \/>\nNOx = sum(LCA.matrix$NOx.LC),<br \/>\nSO2 = sum(LCA.matrix$SO2.LC),<br \/>\nCost = sum(LCA.matrix$TotalCost.LC))<br \/>\nreturn(LCA.results)<br \/>\n}<\/p>\n<p>metro.length &lt;- 80<\/p>\n<p># chosen.Superstructure.Option &lt;- readline(prompt = &#8220;Enter metro station ooption index (1-4): &#8220;)<br \/>\nsuperstructure.Options &lt;- c(&#8220;CRC&#8221;, &#8220;PRC&#8221;, &#8220;CFRC&#8221;, &#8220;PFRC&#8221;)<\/p>\n<p>Option.metro &lt;- LCA.station(metro.length, superstructure.Options[2], LCI.materials, maintenance.Metro)<\/p>\n<p>## Bridge<\/p>\n<p>LCA.bridge &lt;- function(length, width, height, thickness, girder.Option, deck.Option, materials, dist.event) {<br \/>\nsteel.girders.unitWeight &lt;- 317 #the weight for HEM800 steel profile<br \/>\nasphalt.Q &lt;- length * width * thickness<\/p>\n<p>materials.split &lt;- split(materials, materials$scope)<\/p>\n<p>s &lt;- summary(as.factor(dist.event$event))<br \/>\ns2 &lt;- as.data.frame(rbind(Freq = s), stringsAsFactors=F, row.names = 1:length(s))<\/p>\n<p># calculate the volume of the deck based on different materials strategies<br \/>\nif(deck.Option == &#8220;RC&#8221;) {<br \/>\ndeck.volume &lt;- length * width * height<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n} else if (deck.Option == &#8220;steel&#8221;) {<br \/>\ndeck.volume &lt;-\u00a0\u00a0 \u00a00.1 * length * width * height<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<\/p>\n<p>} else if (deck.Option == &#8220;rsteel&#8221;) {<br \/>\ndeck.volume &lt;- 0.1 * length * width * height<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n}<br \/>\n#girder options<br \/>\nif (girder.Option == &#8220;steel&#8221;) {<br \/>\nn &lt;- round(width \/ 3, 0)<br \/>\ngirders.V &lt;- n * steel.girders.unitWeight * length<br \/>\ninterventions.girders &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<\/p>\n<p>} else if (girder.Option == &#8220;rsteel&#8221;) {<br \/>\nn &lt;- round(width \/ 3, 0)<br \/>\ngirders.V &lt;- n * steel.girders.unitWeight * length<br \/>\ninterventions.girders &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0}) }<\/p>\n<p>asph.interventions = length(dist.event$event)-1<br \/>\nasphalt &lt;- mutate(materials.split$asphalt, bridge.Q = asphalt.Q, interventions = asph.interventions)<br \/>\ndeck &lt;- mutate(materials.split[[deck.Option]],\u00a0\u00a0 \u00a0bridge.Q = deck.volume, interventions = interventions.deck)<br \/>\ngirders &lt;- mutate(materials.split[[girder.Option]], bridge.Q = girders.V, interventions = interventions.girders)<br \/>\nLCA.matrix &lt;- rbind(deck, girders, asphalt)<\/p>\n<p># bridge.Q in m^3 or t (steel)<br \/>\nLCA.matrix &lt;- mutate(LCA.matrix, TotalMaterials.Q = quantities * bridge.Q,<br \/>\nmaterials.LC = TotalMaterials.Q * interventions,<br \/>\nEnergy.LC = materials.LC * energy,<br \/>\nCO2.LC = materials.LC * CO2,<br \/>\nCost.LC = materials.LC * cost)<br \/>\nLCA.results &lt;- list(Energy = sum(LCA.matrix$Energy.LC),<br \/>\nCO2 = sum(LCA.matrix$CO2.LC),<br \/>\nCost = sum(LCA.matrix$Cost.LC))<br \/>\nreturn(LCA.results)<br \/>\n}<\/p>\n<p>bridge.length &lt;- 30 # units: m<br \/>\nbridge.width &lt;- 10 #units m<br \/>\nbridge.depth &lt;- 0.25 #units m<br \/>\nbridge_asphalt.tk &lt;- 0.12 #units m<\/p>\n<p>girder.Options &lt;- c(&#8220;steel&#8221;, &#8220;rsteel&#8221;)<br \/>\ndeck.options &lt;- c(&#8220;RC&#8221;, &#8220;steel&#8221;, &#8220;rsteel&#8221;)<\/p>\n<p>#chosen.Bridge_deck.Option &lt;- readline(prompt = &#8220;Enter bridge deck option index (1-3): &#8220;)<br \/>\n#chosen.Bridge_girder.Option &lt;- readline(prompt = &#8220;Enter bridge girder option index (1-2): &#8220;)<\/p>\n<p>Option.bridge &lt;- LCA.bridge(bridge.length, bridge.width, bridge.depth, bridge_asphalt.tk,<br \/>\ngirder.Options[2], deck.options[2], LCI.materials, maintenance.Bridge)<\/p>\n<p>## Building<\/p>\n<p>LCA.pile &lt;- function(length, width, depth, th, pile.Option, materials, dist.event)<br \/>\n{<br \/>\nconcpile.crs &lt;- 0.018<br \/>\nconcpile.cap.section &lt;- 16<br \/>\ntimber.crs &lt;- 0.19<br \/>\nsteel.crs &lt;- 49.50<br \/>\ncap.Q &lt;- concpile.cap.section * th<\/p>\n<p>materials.split &lt;- split(materials, materials$scope)<\/p>\n<p>s &lt;- summary(as.factor(dist.event$event))<br \/>\ns2 &lt;- as.data.frame(rbind(Freq = s), stringsAsFactors=F, row.names = 1:length(s))<\/p>\n<p># calculate the volume of the pile based on different materials strategies<br \/>\nif(pile.Option == &#8220;RC&#8221;) {<br \/>\nx &lt;- round(width \/ 5)<br \/>\ny &lt;- round(length \/ 5)<br \/>\nn &lt;- x * y<br \/>\npile.volume &lt;- n * concpile.crs * depth<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n} else if (pile.Option == &#8220;steel&#8221;) {<br \/>\nx &lt;- round(width \/ 5)<br \/>\ny &lt;- round(length \/ 5)<br \/>\nn &lt;- x * y<br \/>\npile.volume &lt;- n * timber.crs * depth<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n} else if (pile.Option == &#8220;wood&#8221;) {<br \/>\nx &lt;- round(width \/ 5)<br \/>\ny &lt;- round(length \/ 5)<br \/>\nn &lt;- x * y<br \/>\npile.volume &lt;- n * steel.crs * depth<br \/>\ninterventions.deck &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n}<br \/>\ncap.interventions = length(dist.event$event)-1<br \/>\ncap &lt;- mutate(materials.split$RC, foun.Q = cap.Q, interventions = cap.interventions)<br \/>\npile &lt;- mutate(materials.split[[pile.Option]], foun.Q = pile.volume, interventions =<br \/>\ninterventions.deck)<br \/>\nLCA.matrix &lt;- rbind(pile, cap)<br \/>\nLCA.matrix &lt;- mutate(LCA.matrix, TotalMaterials.Q = quantities * foun.Q \/ 1000,<br \/>\nmaterials.LC = TotalMaterials.Q * interventions,<br \/>\nEnergy.LC = materials.LC * energy,<br \/>\nCO2.LC = materials.LC * CO2 * 1000,<br \/>\nNOx.LC = materials.LC * NOX * 1000,<br \/>\nSO2.LC = materials.LC * SO2 * 1000)<br \/>\nLCA.results &lt;- list(Energy = sum(LCA.matrix$Energy.LC),<br \/>\nCO2 = sum(LCA.matrix$CO2.LC),<br \/>\nNOX = sum(LCA.matrix$NOx.LC),<br \/>\nSO2 = sum(LCA.matrix$SO2.LC))<br \/>\nreturn(LCA.results)<br \/>\n}<\/p>\n<p>p.length &lt;- 16 # units: m<br \/>\np.width &lt;- 15 #units m<br \/>\np.depth &lt;- 50 #units m<br \/>\np.th &lt;- 0.12 #units m<\/p>\n<p>#chosen.pile.Option &lt;- readline(prompt = &#8220;Enter pile option index (1-3): &#8220;)<br \/>\npile.Option &lt;- c(&#8220;RC&#8221;, &#8220;steel&#8221;, &#8220;wood&#8221;)<\/p>\n<p>Option.building &lt;- LCA.pile(p.length, p.width, p.depth, p.th, pile.Option[2], LCI.materials, maintenance.Building)<\/p>\n<p>## Water Distribution System<br \/>\nLCA.pipe &lt;- function(length, time.length, externalDiameter, internalDiameter, pipe.Option, soil.option, sources, dist.event) {<\/p>\n<p>pipe.frequency &lt;- 398.97 # value of corrosion mass loss rate<\/p>\n<p># pipe option<br \/>\n# calculate corrosion rate<\/p>\n<p>if(pipe.Option == &#8220;Cast Iron&#8221;) {<br \/>\npipe.density &lt;- 7850 #unit kg\/m3<br \/>\npipe.initial.mass &lt;- 47.34*length #unit kg (weight\/length = 31.24 kg\/m)<br \/>\npipe.modulus &lt;- 206000 # unit MPa<br \/>\npipe.poisson &lt;- 0.3<br \/>\ninterventions.pipe &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<\/p>\n<p>} else if (pipe.Option == &#8220;Ductile Iron&#8221;) {<br \/>\npipe.density &lt;- 7850 #unit kg\/m3<br \/>\npipe.initial.mass &lt;- 47.34*length #unit kg (weight\/length = 31.24 kg\/m)<br \/>\npipe.modulus &lt;- 206000 # unit MPa<br \/>\npipe.poisson &lt;- 0.3<br \/>\ninterventions.pipe &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<\/p>\n<p>} else if (pipe.Option == &#8220;PVC&#8221;) {<br \/>\npipe.density &lt;- 1450 #unit kg\/m3<br \/>\npipe.initial.mass &lt;- 25.44*length #unit kg (weight\/length = 16.21 kg\/m)\u00a0\u00a0\u00a0 pipe.modulus &lt;- 3275 # unit MPa<br \/>\npipe.poisson &lt;- 0.3<br \/>\ninterventions.pipe &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<\/p>\n<p>} else if (pipe.Option == &#8220;Concrete&#8221;) {<br \/>\npipe.external.diameter &lt;-\u00a0 750 #unit mm<br \/>\npipe.density &lt;- 2500 #unit kg\/m3<br \/>\npipe.initial.mass &lt;- 227.5*length #unit kg (weight\/length = 16.21 kg\/m)<br \/>\npipe.modulus &lt;- 43800 # unit MPa<br \/>\npipe.poisson &lt;- 0.2<br \/>\ninterventions.pipe &lt;- s2$DC + s2$DR + 0.25 * s2$SDO + 0.35 * (if (!is.null(s2$PR)) {s2$PR}<br \/>\nelse {0})<br \/>\n}<\/p>\n<p>pipe.mass.loss.rate &lt;- (1\/(2*time.length))*(externalDiameter-sqrt(((4*pipe.frequency*pipe.initial.mass)\/(pi*pipe.density))-(internalDiameter**2)))<br \/>\n#\u00a0 pipe.mass.loss.rate &lt;- abs(pipe.mass.loss.rate)<\/p>\n<p>log_OTC &lt;- filter(sources, type == soil.option)<br \/>\nlog_OTC &lt;- select(log_OTC, OTC)<\/p>\n<p>log_SMZ &lt;- filter(sources, type == soil.option)<br \/>\nlog_SMZ &lt;- select(log_SMZ, SMZ)<\/p>\n<p>log_NOR &lt;- filter(sources, type == soil.option)<br \/>\nlog_NOR &lt;- select(log_NOR, NOR)<\/p>\n<p>LCA.matrix &lt;- cbind(pipe.mass.loss.rate, log_OTC, log_SMZ, log_NOR)<\/p>\n<p>LCA_result &lt;- list(pipe.mass.loss.rate,<br \/>\nlog_OTC,<br \/>\nlog_SMZ,<br \/>\nlog_NOR)<\/p>\n<p>return(LCA_result)<br \/>\n}<\/p>\n<p>pipe.length &lt;- 10 # units: m<br \/>\npipe.time &lt;- 20 #units years<br \/>\npipe.external.diameter &lt;-\u00a0 0.400 #units: m<br \/>\npipe.internal.diameter &lt;- 0.360 #unit: m<\/p>\n<p># chosen.pipe.Option &lt;- readline(prompt = &#8220;Enter pipe option index (1-4): &#8220;)<br \/>\npipe.Options &lt;- c(&#8220;Cast Iron&#8221;, &#8220;Ductile Iron&#8221;, &#8220;PVC&#8221;, &#8220;Concrete&#8221;)<br \/>\n#pipe.density &lt;- c(7850, 7850, 1450, 2500)<br \/>\n# chosen.soil.Option &lt;- readline(prompt = &#8220;Enter soil option index (1-6): &#8220;)<br \/>\nsoil.option &lt;- c(&#8220;Fluvo-aquic soil&#8221;, &#8220;Red soil&#8221;, &#8220;Yellow soil&#8221;, &#8220;Bog soil&#8221;, &#8220;Brown soil&#8221;, &#8220;Latosolic&#8221;)<\/p>\n<p>Option.water &lt;- LCA.pipe(p.length, p.time, p.external.diameter, p.internal.diameter, pipe.Options[2],<br \/>\nsoil.option[2], LCI.materials, maintenance.Water)<\/p>\n<p>### combined<\/p>\n<p>integrated.Design &lt;- as.data.frame(list(Energy = Option.metro$Energy + Option.bridge$Energy + Option.building$Energy + Option.water$Energy,<br \/>\nCO2 = Option.metro$CO2 + Option.bridge$CO2 + Option.building$CO2 + Option.water$CO2,<br \/>\nNOx = Option.metro$NOx + Option.bridge$NOx + Option.building$NOx + Option.water$NOx,<br \/>\nSO2 = Option.metro$SO2 + Option.bridge$SO2 + Option.building$SO2 + Option.water$SO2))<\/p>\n<p>Energy.costs &lt;- 0.128<br \/>\nCO2.unitcost &lt;- 26 # per metric tone<br \/>\nNOx.unitCost &lt;- 42 # per metric tone<br \/>\nSO2.unitCosts &lt;- 85 # per metric tone<\/p>\n<p>integrated.Design &lt;- mutate(integrated.Design,<br \/>\nCosts = (Energy * Energy.costs +<br \/>\nCO2*CO2.unitcost +<br \/>\nNOx * NOx.unitCost +<br \/>\nSO2 * SO2.unitCosts)\/10^9)<\/p>\n<p>###<\/p>\n<p>##\u00a0 Multi-Objective Optimization<\/p>\n<p>fitness &lt;- function(x) {<\/p>\n<p>z &lt;- numeric(7)<\/p>\n<p>y &lt;- expand.grid(SDO.m = x[1], M.m = x[2], DR.m = x[3], SDO.br = x[4], M.br = x[5], R.br = x[6],<br \/>\nSDO.bu = x[7], M.bu = x[8], DR.bu = x[9], SDO.w = x[10], M.w = x[11], R.w = x[12])<br \/>\ndur.ev1 &lt;- unlist(y[1:3] \/ 2)<br \/>\ndur.ev2 &lt;- unlist(y[4:6] \/ 2)<br \/>\ndur.ev3 &lt;- unlist(y[7:9] \/ 2)<br \/>\ndur.ev4 &lt;- unlist(y[10:12] \/ 2)<\/p>\n<p>dist.1 &lt;- apply(y[1:3], 1, FUN = dist.Events, lifetime = lifetime, start.Date = start.Date)<br \/>\ndist.2 &lt;- apply(y[4:6], 1, FUN = dist.Events, lifetime = lifetime, start.Date = start.Date)<br \/>\ndist.3 &lt;- apply(y[7:9], 1, FUN = dist.Events, lifetime = lifetime, start.Date = start.Date)<br \/>\ndist.4 &lt;- apply(y[10:12], 1, FUN = dist.Events, lifetime = lifetime, start.Date = start.Date)<\/p>\n<p>results &lt;- combine.lifeTimelines(dist.1[[1]], dist.2[[1]], dist.3[[1]], dist.4[[1]],<br \/>\ndur.ev1, dur.ev2, dur.ev3, dur.ev4)<\/p>\n<p>z[1] &lt;- sum(results[[&#8220;duration&#8221;]])<\/p>\n<p>z[2] &lt;- -min(abs(results$frequency[1:(length(results$frequency) &#8211; 1)] &#8211;<br \/>\nresults$frequency[2:length(results$frequency)]))<\/p>\n<p># Metro features<br \/>\nmetro.length &lt;- 80<\/p>\n<p>chosen.Superstructure.Option &lt;- readline(prompt = &#8220;Enter metro station ooption index (1-4): &#8220;)<br \/>\nsuperstructure.Options &lt;- c(&#8220;CRC&#8221;, &#8220;PRC&#8221;, &#8220;CFRC&#8221;, &#8220;PFRC&#8221;)<\/p>\n<p>product.1.metro &lt;- LCA.station(metro.length, superstructure.Options[chosen.Superstructure.Option],<br \/>\nLCI.materials, dist.1[[1]])<\/p>\n<p># Bridge features<br \/>\nbridge.length &lt;- 30 # units: m<br \/>\nbridge.width &lt;- 10 #units m<br \/>\nbridge.depth &lt;- 0.25 #units m<br \/>\nbridge_asphalt.tk &lt;- 0.12 #units m<\/p>\n<p>girder.Options &lt;- c(&#8220;steel&#8221;, &#8220;rsteel&#8221;)<br \/>\ndeck.options &lt;- c(&#8220;RC&#8221;, &#8220;steel&#8221;, &#8220;rsteel&#8221;)<\/p>\n<p>chosen.Bridge_deck.Option &lt;- readline(prompt = &#8220;Enter bridge deck option index (1-3): &#8220;)<br \/>\nchosen.Bridge_girder.Option &lt;- readline(prompt = &#8220;Enter bridge girder option index (1-2): &#8220;)<\/p>\n<p>product.2.bridge &lt;- LCA.bridge(bridge.length, bridge.width, bridge.depth, bridge_asphalt.tk,<br \/>\ngirder.Options[chosen.Bridge_girder.Option],<br \/>\ndeck.options[chosen.Bridge_deck.Option], LCI.materials, dist.2[[1]])<\/p>\n<p># Building features<\/p>\n<p>p.length &lt;- 16 # units: m<br \/>\np.width &lt;- 15 #units m<br \/>\np.depth &lt;- 50 #units m<br \/>\np.th &lt;- 0.12 #units m<\/p>\n<p>chosen.pile.Option &lt;- readline(prompt = &#8220;Enter pile option index (1-3): &#8220;)<br \/>\npile.Option &lt;- c(&#8220;RC&#8221;, &#8220;steel&#8221;, &#8220;wood&#8221;)<\/p>\n<p>product.3.building &lt;- LCA.pile(p.length, p.width, p.depth, p.th, pile.Option[chosen.pile.Option], LCI.materials, dist.3[[1]])<\/p>\n<p># Water_Distribution features<br \/>\npipe.length &lt;- 10 # units: m<br \/>\npipe.time &lt;- 20 #units years<br \/>\npipe.external.diameter &lt;-\u00a0 0.400 #units: m<br \/>\npipe.internal.diameter &lt;- 0.360 #unit: m<\/p>\n<p>chosen.pipe.Option &lt;- readline(prompt = &#8220;Enter pipe option index (1-4): &#8220;)<br \/>\npipe.Options &lt;- c(&#8220;Cast Iron&#8221;, &#8220;Ductile Iron&#8221;, &#8220;PVC&#8221;, &#8220;Concrete&#8221;)<br \/>\n#pipe.density &lt;- c(7850, 7850, 1450, 2500)<br \/>\nchosen.soil.Option &lt;- readline(prompt = &#8220;Enter soil option index (1-6): &#8220;)<br \/>\nsoil.option &lt;- c(&#8220;Fluvo-aquic soil&#8221;, &#8220;Red soil&#8221;, &#8220;Yellow soil&#8221;, &#8220;Bog soil&#8221;, &#8220;Brown soil&#8221;, &#8220;Latosolic&#8221;)<\/p>\n<p>product.4.water &lt;- LCA.pipe(p.length, p.time, p.external.diameter, p.internal.diameter, pipe.Options[chosen.pipe.Option],<br \/>\nsoil.option[chosen.soil.Option], LCI.materials, dist.4[[1]])<\/p>\n<p># Unit Prices<br \/>\nEnergy.costs &lt;- 0.128<br \/>\nCO2.unitcost &lt;- 26<br \/>\nNOx.unitCost &lt;- 42<br \/>\nSO2.unitCosts &lt;- 85<\/p>\n<p>## Combination<\/p>\n<p>integrated.system &lt;- as.data.frame(list(Energy = Option.metro$Energy + Option.bridge$Energy + Option.building$Energy + Option.water$Energy,<br \/>\nCO2 = Option.metro$CO2 + Option.bridge$CO2 + Option.building$CO2 + Option.water$CO2,<br \/>\nNOx = Option.metro$NOx + Option.bridge$NOx + Option.building$NOx + Option.water$NOx,<br \/>\nSO2 = Option.metro$SO2 + Option.bridge$SO2 + Option.building$SO2 + Option.water$SO2))<\/p>\n<p>integrated.system &lt;- mutate(integrated.system,<br \/>\nCosts = (Energy * Energy.costs +<br \/>\nCO2*CO2.unitcost +<br \/>\nNOx * NOx.unitCost +<br \/>\nSO2 * SO2.unitCosts)\/10^9)<\/p>\n<p>z[3] &lt;- integrated.system$Energy<br \/>\nz[4] &lt;- integrated.system$CO2<br \/>\nz[5] &lt;- integrated.system$NOx<br \/>\nz[6] &lt;- integrated.system$SO2<br \/>\nz[7] &lt;- integrated.system$Costs<\/p>\n<p>return(z)<br \/>\n}<\/p>\n<p>r2 &lt;- nsga2(fitness, idim = 7, odim = 7,<br \/>\ngenerations=5, popsize=4,<br \/>\nlower.bounds=c(10, 3, 20, 12, 4, 27, 25),<br \/>\nupper.bounds= c(20, 8, 35, 25, 10, 37, 45))<\/p>\n<p>r2 &lt;- nsga2(fitness, idim = 7, odim = 7,<br \/>\ngenerations=10, popsize=100,<br \/>\nlower.bounds=c(10, 3, 20, 12, 4, 27, 25),<br \/>\nupper.bounds= c(20, 8, 35, 25, 10, 37, 45))<\/p>\n<p>r2Results &lt;- as.data.frame(r2$value)<br \/>\noutNames &lt;- c(&#8220;duration&#8221;, &#8220;interv.dist&#8221;, &#8220;energy&#8221;, &#8220;co2&#8221;, &#8220;nox&#8221;, &#8220;so2&#8221;, &#8220;cost&#8221; )<br \/>\ncolnames(r2Results) &lt;- outNames<\/p>\n<p>pareto3 &lt;- as.data.frame(paretoFront(r2))<br \/>\ncolnames(pareto3) &lt;- outNames<\/p>\n<p>ggplot(r2Results, aes(x = duration, y = cost)) + geom_point(shape = 21) +<br \/>\ngeom_point(data = pareto3, size = 3, color=&#8221;red&#8221;) +<br \/>\ngeom_line(data = pareto3, color=&#8221;blue&#8221;)<\/p>\n<p>input.params &lt;- round(r2$par, 0)<br \/>\nall.results &lt;- cbind(input.params, r2Results, r2$pareto.optimal)<br \/>\ncolnames(all.results) &lt;- c(&#8220;SDO&#8221;, &#8220;M&#8221;, &#8220;DR&#8221;,<br \/>\n&#8220;SDO.r&#8221;, &#8220;M.r&#8221;, &#8220;R.r&#8221;,<br \/>\n&#8220;b.width&#8221;, &#8220;duration&#8221;, &#8220;interv.dist&#8221;,<br \/>\n&#8220;energy&#8221;, &#8220;co2&#8221;, &#8220;nox&#8221;, &#8220;so2&#8221;, &#8220;cost&#8221;,<br \/>\n&#8220;pareto&#8221;)<br \/>\npar(mfrow = c(1,1))<br \/>\nparcoord(all.results[, 1:14], var.label = T,<br \/>\ncol = ifelse(all.results$pareto == TRUE, &#8220;indianred&#8221;, &#8220;skyblue2&#8221;),<br \/>\nlty = ifelse(all.results$pareto == TRUE, 1, 3),<br \/>\nlwd = ifelse(all.results$pareto == TRUE, 3, 1))<\/p>\n","protected":false},"excerpt":{"rendered":"<p>rm (list = ls()) library(timelineS) library(lubridate) library(ggplot2) library(dplyr) library(reshape2) library(rPref) library(mco) library(MASS) plot.timeline &lt;- function(lifetime, events.name, start.Date, plot.Name) { dataP &lt;- data.frame(Events = events.name, Event_Dates = ymd(start.Date) + years(lifetime)) timelineS(dataP, main = plot.Name, labels =<a class=\"read-more\" href=\"http:\/\/141.23.68.248\/wp\/?page_id=15143\">Continue reading<\/a><\/p>\n","protected":false},"author":175,"featured_media":0,"parent":11365,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-15143","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/pages\/15143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/users\/175"}],"replies":[{"embeddable":true,"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15143"}],"version-history":[{"count":1,"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/pages\/15143\/revisions"}],"predecessor-version":[{"id":15144,"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/pages\/15143\/revisions\/15144"}],"up":[{"embeddable":true,"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=\/wp\/v2\/pages\/11365"}],"wp:attachment":[{"href":"http:\/\/141.23.68.248\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}