-
Notifications
You must be signed in to change notification settings - Fork 0
/
design_doc.txt
190 lines (144 loc) · 11.4 KB
/
design_doc.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
TODO add "Reaction Formula" to blueprint name in outputs
Note: The annoying modifier key bug only happens in debug builds!!!
TODO write good notes for how to deploy to windows & web
web: need to update the scriptVersion & serviceWorkerVersion in index.html
flutter build web
cd build/web dir
init (if needed) a git repo with remote https://github.com/caldaricitizen31341/evereactornew
push
desktop: recompile dll if needed
flutter build windows
cd build\windows\runner
copy the Release folder to desktop
rename the Release folder to EveReactor
cd EveReactor
rename test.exe to EveReactor.exe
copy advanced_solver_cpp/x64/Release/WINDOWSISCOOL.dll to EveReactor/solver.dll
zip
TODO New Features
1) Separate scheduling for rtn/mfg
So today I realized that I want to be able to set a maximum duration for a batch. This is for security against evictions.
Doing this causes poor scheduling performance of the basic_solver.
So... solution? use the advanced solver.
And that works for just reactions or just manufacturing.
But for the builds with reactions and manufacturing the advanced solver produces a schedule that cannot be stacked
with schedules of other builds.. this may be undesirable for certain people.
So i need the option to apply the advanced scheduler to reactions & manufacturing separately..
This would add a checkbox for scheduling separately and a text box for setting max job duration
I guess this could be done with a simple greater than constraint in the adv solver.
...
Update: Given the structure type and the structure location you can work out the max duration for a batch
given previous durations and assuming that the first batch was started soon after the structure reinforcement
time (18:00 for Sugar). For the tatara it's roughly 2 days since it is in wh space and is a large structure.
see https://support.eveonline.com/hc/en-us/articles/208289385-Upwell-Structures-Vulnerability-States
and https://wiki.eveuniversity.org/Vulnerability
To implement this in the advanced solver all I need to do is make sure that the start&end time of each batch
has the same quotient by 2days (ie each batch starts and ends in the same block of 2days)?? Yes and no. This
allows gaps between batches of same machine type then right? that breaks assumptions i made pretty much everywhere.
so have to deal with that somehow.
so i am not going to do this on web (only with the advanced solver.)
2) Caching of the build for later reference.
Many times through the week I am curious how much building certain items cost.
To use my app to check I must clear the data from the previous build.
I usually do not want to do that because I will want to check prices for my previous build many times
throughout the week.
So I need to store the previous build so I can clear the 'current working' data and load it back later.
This is probably a whole new pane with a table of builds and other information/buttons.
3) Calculate prices for current build assuming that previous build buy orders have been sold to.
Often I want to schedule the next build before I finish selling off the items from the previous build.
If I do so now then the app can use buy orders for the current build that will be completely gone when
the previous build is sold. Which can cause very bad inaccuracies in the profit calculations for the
curren build.
4) finish implementing inventory
TODO really should take jobcosts into consideration in heuristic list
TODO double check that I am not leaking memory in the cpp<->dart layer
Perfect is the enemy of the good
How does inventory work?
inventory is always applied if it is available.
if there is inventory for an item that is set to build then the build of that item will be elided if possible.
if not possible then the item will still be built.
if there's inventory for an item that is set to buy then inventory will contribute as much as possible.
if all required amount of this item is provided by the inventory then nothing will be bought
otherwise what needs to be purchased will contribute to the cost of the build and will be present in the multibuy.
if an item is completely supplied by inventory then it does not have a build/buy decision available since, given
the above behavior, either selection would have no effect.
What items go into the intermediates table? (build/buy table)
An item is in the intermediates table if it is buildable (also if not a fuel block or t1 thing ... )
and (if not all of its parents (must have parents) are set to buy or if one of my parents is a target).
Also, if an item is completely supplied by inventory then build/buy makes no difference.
However, for UX consistency, it'd be better I think if it did not depend on the schedule.
Performance
What is the 'Value'? 'Value' is difference between profit when built and profit when bought.
value = (profit if built) - (profit if bought)
I can assume there is a cached schedule. (when underlying build changes then whole schedule is recomputed)
so on layout I have to compute schedules for each item... (only opposite for each item right?)
might be slow depending on final imp of scheduler.
BpOps
an item has BpOps iff it is not also in the targets table
TODO unicode normalize search strings in search bar?
RESTRICTIONS----------------------------------------------------------------------------------------------------------
Never build any MFG item that is input to RTN item (fuel blocks)
Assumes structures are located where the rigs give the best bonuses. (LS for thukker rigs)
Note - Large 'Sheriff' Shield Extender Blueprint can drop with 20% ME
https://cdn.discordapp.com/attachments/492765138760237056/932976232474222622/unknown.png
----------------------------------------------------------------------------------------------------------------------
MARKET DATA-----------------------------------------------------------------------------------------------------------
Application X - Contact 'Dark808bb'
----------------------------------------------------------------------------------------------------------------------
LOOKS-----------------------------------------------------------------------------------------------------------------
I am using flutter master channel because material 3 components are only available on the master channel
use defaulttextstyle? or have a list of text style's in my_theme?
Make look good... layout, colors, fonts, better loader (loader kinda sucks, it's aliased)
Get some fonts here https://fonts.google.com/
--------------------------------------------------------------------------- ----- ------------------------------------
DEVELOPMENT-----------------------------------------------------------------------------------------------------------
TODO msix_config for startmenu stuff google 'how to create msix_config windows'
Setup CI? so that people can be sure that exe hosted on github releases has been built by the code
----------------------------------------------------------------------------------------------------------------------
SDE-------------------------------------------------------------------------------------------------------------------
Note there are name -> type conflicts in the SDE. I made a bug report about this on community.eveonline.com
Custom build amounts (set by me) for heuristic profit% calculations in the Browse window // LOW LOW PRIOR
Idk maybe there is a way to automatically choose build amounts to calculate an approximate profit percent.
But, if there really is not then I can customize things :/
But, I'd prefer not to though, if some new item comes to the market, then what do I do?
----------------------------------------------------------------------------------------------------------------------
FEATURES--------------------------------------------------------------------------------------------------------------
Outputs should all be tables that are paste-able into EXCEL
Have a donate button / bitcoin wallet address.
Have blueprints in inventory (and missing in multibuy)? just for calculating how many blueprints are needed to do the job.
Interesting, if I did this then I'd want to have a blueprintID to itemID map.
I guess I would need friggin blueprint names as well...
Add hints to different UI elements to help explain things a bit.
Have a QA section?
----------------------------------------------------------------------------------------------------------------------
GUI/UX----------------------------------------------------------------------------------------------------------------
TODO do not http language font characters on web. on desktop fonts load instantly from the font file.
but on web, non english characters load through a http request despite having the whole font file available in the assets directory
TODO Tooltips
Get Market Data : Loads market data from the ESI.
Value: Profit if built i.e. (Profit if Build) - (Profit if Buy)
Cost/u : build price per unit
Sell/u : sale price per unit
% : Profit percent
----------------------------------------------------------------------------------------------------------------------
ADDITIONAL PROFIT-----------------------------------------------------------------------------------------------------
Additional profit helps you determine if you should build the absolution instead of just selling the intermediates for profit.
If B is used to build A, and there is profit pB in building and selling B and profit pA in building and selling pA, then
the additional profit for using the B (that you built) to build A is ap = pA - pB. If ap is negative then you loose money in building A. It would be more
profitable to build the B's and then sell those.
There is 3 problems with additional profit:
1. There are more considerations than pure profit, such as volume reduction by building A and minimizing risk by selling A's and B's instead of just A's or B's.
2. Market volume for intermediate items is low, so having intermediates as primary items to sell is not a good idea because a low volume market is less reliable.
It is better to build primarily A's and maybe build a few B's on the side (depending on market volume of course)
3. It adds more complexity to the application which is already complex enough.
So I am not going to implement additional profit calculations. But I will leave this section for future reference, lol.
*additional profit can be negative. in the case where it is not profitable to build but there
is not enough decent sell orders on market. (still build cost < buy cost)
*additional profit = total profit for building X - sum(total profit of component Y if we build Y)?????
*additional profit is the amount we make by building X instead of building all Y's and selling them
on market. The total profit of the root is equal to the sum of the additional profits
of each node we build. The amount we could sell a Y for depends on what that Y is.
In theory everything could be sold at min sell. But things like processed moon mats have low volume
at market and so the only feasible way (er the only way i want to try) to liquidate is
to sell to buy orders.
----------------------------------------------------------------------------------------------------------------------